Бібліотека стійкості кімнати Android з любов’ю включає анотації @Insert та @Update, які працюють для об’єктів або колекцій. Однак у мене є варіант використання (push-сповіщення, що містять модель), який вимагає UPSERT, оскільки дані можуть або не існувати в базі даних.
Sqlite спочатку не підтримує підтримку, і обхідні шляхи описані в цьому запитанні SO . З огляду на тамтешні рішення, як застосувати їх до Room?
Якщо бути більш конкретним, як я можу застосувати вставку або оновлення в кімнаті, що не порушить жодних обмежень зовнішнього ключа? Використання вставки з onConflict = REPLACE призведе до виклику onDelete будь-якого зовнішнього ключа цього рядка. У моєму випадку onDelete викликає каскад, а повторне вставлення рядка призведе до видалення рядків в інших таблицях із зовнішнім ключем. Це НЕ передбачувана поведінка.