Android의 Room 지속성 라이브러리에는 개체 또는 컬렉션에 대해 작동하는 @Insert 및 @Update 주석이 정중하게 포함되어 있습니다. 그러나 데이터가 데이터베이스에있을 수도 있고 없을 수도 있으므로 UPSERT가 필요한 사용 사례 (모델이 포함 된 푸시 알림)가 있습니다.
Sqlite에는 기본적으로 upsert가 없으며 해결 방법은이 SO 질문에 설명되어 있습니다. 거기에 솔루션이 주어지면 어떻게 Room에 적용할까요?
더 구체적으로 말하면 외래 키 제약 조건을 위반하지 않는 Room에서 삽입 또는 업데이트를 구현하려면 어떻게해야합니까? onConflict = REPLACE와 함께 insert를 사용하면 해당 행에 대한 모든 외래 키에 대한 onDelete가 호출됩니다. 제 경우에는 onDelete로 인해 계단식이 발생하고 행을 다시 삽입하면 외래 키가있는 다른 테이블의 행이 삭제됩니다. 이것은 의도 된 동작이 아닙니다.