La bibliothèque de persistance Room d'Android comprend gracieusement les annotations @Insert et @Update qui fonctionnent pour les objets ou les collections. J'ai cependant un cas d'utilisation (notifications push contenant un modèle) qui nécessiterait un UPSERT car les données peuvent ou non exister dans la base de données.
Sqlite n'a pas d'upsert nativement, et les solutions de contournement sont décrites dans cette question SO . Compte tenu des solutions, comment les appliquerait-on à Room?
Pour être plus précis, comment puis-je implémenter une insertion ou une mise à jour dans Room qui ne briserait aucune contrainte de clé étrangère? L'utilisation d'insert avec onConflict = REPLACE entraînera l'appel de onDelete pour toute clé étrangère de cette ligne. Dans mon cas, onDelete provoque une cascade, et la réinsertion d'une ligne entraînera la suppression de lignes dans d'autres tables avec la clé étrangère. Ce n'est PAS le comportement prévu.