ไลบรารีความคงอยู่ของ Room ของ Android มีคำอธิบายประกอบ @Insert และ @Update ที่ใช้กับวัตถุหรือคอลเล็กชัน อย่างไรก็ตามฉันมีกรณีการใช้งาน (การแจ้งเตือนแบบพุชที่มีโมเดล) ที่ต้องใช้ UPSERT เนื่องจากข้อมูลอาจมีหรือไม่มีอยู่ในฐานข้อมูล
Sqlite ไม่มีการเพิ่มขึ้นโดยกำเนิดและวิธีแก้ปัญหาจะอธิบายไว้ในคำถาม SOนี้ จากวิธีแก้ปัญหาที่นั่นเราจะนำไปใช้กับ Room ได้อย่างไร
เพื่อให้เจาะจงมากขึ้นฉันจะใช้การแทรกหรือการอัปเดตในห้องที่ไม่ทำลายข้อ จำกัด ของคีย์แปลกปลอมได้อย่างไร การใช้การแทรกกับ onConflict = REPLACE จะทำให้ onDelete สำหรับคีย์ต่างประเทศใด ๆ ในแถวนั้นถูกเรียก ในกรณีของฉัน onDelete ทำให้เกิดการเรียงซ้อนและการใส่แถวใหม่จะทำให้แถวในตารางอื่นที่มีคีย์นอกนั้นถูกลบ นี่ไม่ใช่พฤติกรรมที่ตั้งใจไว้