Android の Room 永続化ライブラリには、オブジェクトまたはコレクションに対して機能する @Insert および @Update アノテーションが含まれています。ただし、データがデータベースに存在する場合と存在しない場合があるため、UPSERT が必要なユース ケース (モデルを含むプッシュ通知) があります。
Sqlite にはネイティブの upsert がなく、回避策はこのSO questionに記載されています。そこにあるソリューションを考えると、それらを Room にどのように適用しますか?
より具体的には、外部キーの制約に違反しない挿入または更新を Room に実装するにはどうすればよいですか? onConflict=REPLACE で挿入を使用すると、その行への外部キーの onDelete が呼び出されます。私の場合、 onDelete はカスケードを引き起こし、行を再挿入すると、外部キーを持つ他のテーブルの行が削除されます。これは意図した動作ではありません。