Библиотека сохраняемости Room в Android любезно включает аннотации @Insert и @Update, которые работают для объектов или коллекций. Однако у меня есть вариант использования (push-уведомления, содержащие модель), для которого потребуется UPSERT, поскольку данные могут существовать или не существовать в базе данных.
Sqlite не имеет встроенного upsert, и обходные пути описаны в этом вопросе SO . Учитывая имеющиеся там решения, как их применить к Room?
Чтобы быть более конкретным, как я могу реализовать вставку или обновление в Room, которое не нарушило бы никаких ограничений внешнего ключа? Использование вставки с onConflict = REPLACE приведет к вызову onDelete для любого внешнего ключа этой строки. В моем случае onDelete вызывает каскад, и повторная вставка строки приведет к удалению строк в других таблицах с внешним ключом. Это НЕ предполагаемое поведение.