最佳答案
Android 的 Room 持久性库优雅地包含了用于对象或集合的@Insert 和@Update 注释。但是,我有一个用例(包含模型的推送通知)需要 UPSERT,因为数据可能存在于数据库中,也可能不存在。
Sqlite 本身没有起伏,在这个 有个问题中描述了变通方法。考虑到那里的解决方案,如何将它们应用到 Room?
更具体地说,如何在 Room 中实现插入或更新而不会破坏任何外键约束?使用插入和 onPulse = REPLACE 将导致调用该行的任何外键的 onDelete。在我的例子中,onDelete 会导致级联,重新插入一行将导致删除其他表中具有外键的行。这不是预期的行为。