La libreria di persistenza Room di Android include graziosamente le annotazioni @Insert e @Update che funzionano per oggetti o raccolte. Tuttavia, ho un caso d'uso (notifiche push contenenti un modello) che richiederebbe un UPSERT poiché i dati possono o non possono esistere nel database.
Sqlite non dispone di upsert in modo nativo e le soluzioni alternative sono descritte in questa domanda SO . Date le soluzioni disponibili, come applicarle a Room?
Per essere più precisi, come posso implementare un inserimento o un aggiornamento in Room che non rompa i vincoli di chiave esterna? L'utilizzo di insert con onConflict = REPLACE causerà la chiamata di onDelete per qualsiasi chiave esterna a quella riga. Nel mio caso onDelete provoca una cascata e il reinserimento di una riga causerà l'eliminazione delle righe in altre tabelle con la chiave esterna. Questo NON è il comportamento previsto.