Library persistensi Room Android dengan anggun menyertakan anotasi @Insert dan @Update yang berfungsi untuk objek atau koleksi. Namun saya memiliki kasus penggunaan (pemberitahuan push yang berisi model) yang akan memerlukan UPSERT karena datanya mungkin ada atau mungkin tidak ada dalam database.
Sqlite tidak memiliki upsert secara asli, dan penyelesaiannya dijelaskan dalam pertanyaan SO ini . Mengingat solusi yang ada, bagaimana cara menerapkannya ke Room?
Untuk lebih spesifiknya, bagaimana cara menerapkan penyisipan atau pembaruan di Room yang tidak akan merusak batasan kunci asing? Menggunakan sisipkan dengan onConflict = REPLACE akan menyebabkan onDelete untuk kunci asing apa pun ke baris itu dipanggil. Dalam kasus saya onDelete menyebabkan kaskade, dan memasukkan kembali baris akan menyebabkan baris di tabel lain dengan kunci asing dihapus. Ini BUKAN perilaku yang diinginkan.