Biblioteka trwałości Room systemu Android łaskawie zawiera adnotacje @Insert i @Update, które działają dla obiektów lub kolekcji. Mam jednak przypadek użycia (powiadomienia push zawierające model), który wymagałby przesłania UPSERT, ponieważ dane mogą, ale nie muszą istnieć w bazie danych.
Sqlite nie ma natywnego upsert, a obejścia są opisane w tym pytaniu SO . Biorąc pod uwagę dostępne tam rozwiązania, jak można je zastosować do Pokoju?
Mówiąc dokładniej, w jaki sposób mogę zaimplementować wstawianie lub aktualizację w pokoju, która nie złamałaby żadnych ograniczeń klucza obcego? Użycie insert z onConflict = REPLACE spowoduje wywołanie onDelete dla dowolnego klucza obcego w tym wierszu. W moim przypadku onDelete powoduje kaskadę, a ponowne wstawienie wiersza spowoduje usunięcie wierszy w innych tabelach z kluczem obcym. NIE jest to zamierzone zachowanie.