Die Room Persistence Library von Android enthält freundlicherweise die Anmerkungen @Insert und @Update, die für Objekte oder Sammlungen funktionieren. Ich habe jedoch einen Anwendungsfall (Push-Benachrichtigungen, die ein Modell enthalten), für den ein UPSERT erforderlich wäre, da die Daten möglicherweise in der Datenbank vorhanden sind oder nicht.
Sqlite hat kein Upsert von Haus aus, und Problemumgehungen werden in dieser SO-Frage beschrieben . Wie würde man die dortigen Lösungen auf Room anwenden?
Wie kann ich eine Einfügung oder Aktualisierung in Room implementieren, die keine Fremdschlüsseleinschränkungen aufhebt? Wenn Sie insert mit onConflict = REPLACE verwenden, wird onDelete für jeden Fremdschlüssel für diese Zeile aufgerufen. In meinem Fall verursacht onDelete eine Kaskade, und das erneute Einfügen einer Zeile führt dazu, dass Zeilen in anderen Tabellen mit dem Fremdschlüssel gelöscht werden. Dies ist NICHT das beabsichtigte Verhalten.