Thư viện bền bỉ trong Room của Android bao gồm các chú thích @Insert và @Update hoạt động cho các đối tượng hoặc bộ sưu tập. Tuy nhiên, tôi có một trường hợp sử dụng (thông báo đẩy có chứa một mô hình) sẽ yêu cầu UPSERT vì dữ liệu có thể tồn tại hoặc có thể không tồn tại trong cơ sở dữ liệu.
Sqlite không có upert nguyên bản và các cách giải quyết được mô tả trong câu hỏi SO này . Với các giải pháp ở đó, người ta sẽ áp dụng chúng vào Room như thế nào?
Để cụ thể hơn, làm cách nào tôi có thể triển khai chèn hoặc cập nhật trong Room mà không phá vỡ bất kỳ ràng buộc khóa ngoại nào? Sử dụng insert với onConflict = REPLACE sẽ khiến onDelete cho bất kỳ khóa ngoại nào của hàng đó được gọi. Trong trường hợp của tôi, onDelete gây ra một dòng chảy và việc nhập lại một hàng sẽ khiến các hàng trong các bảng khác có khóa ngoại bị xóa. Đây KHÔNG phải là hành vi dự định.