2017-10-24 7 views
1

저는 응용 프로그램에서 데이터베이스 상호 작용을 위해 안드로이드의 룸 라이브러리를 사용하고 있습니다. 중복 엔트리가 데이터베이스에 삽입되는 것을 방지하는 방법에 대해 다소 혼란 스럽습니다.안드로이드 룸에 중복 된 엔티티가 삽입되었습니다.

내가 할 일이 없어 보이기 때문에 뭔가 빠뜨린 것 같아. 주제와 관련된 다양한 단어 조합을 Google에서 검색했습니다.

필자는 본질적으로 샘플 중 하나를 삽입하고 쿼리하는 데 사용합니다.

엔터티 :

@Entity(tableName = "cameras") 
public class CameraEntity { 
    @PrimaryKey(autoGenerate = true) 
    private int id; 
    private Integer accountId; 
    private Integer dvrId; 
    private String vendorId; 
    ... 
} 

DAO를 :

@Dao 
public interface CameraDao { 

    @Query("SELECT * FROM cameras") 
    Flowable<List<CameraEntity>> getCameras(); 

    @Insert(onConflict = OnConflictStrategy.REPLACE) 
    void insertAll(List<CameraEntity> values); 
} 

객실 라이브러리의 측면에서, 데이터가 삽입되어야 할 때 몇 가지 규칙을 설정하는 방법은 없나요? 내가 읽은 한 게시물은 자동 증분 ID로 인해 각 항목이 기본 키의 관점에서 고유하게 나타납니다. 그것이 사실이라면,이 라이브러리를 사용하는 다른 사람들은 어떻게 그것을 설명합니까?

감사합니다.

+0

"자동 증가 ID로 인해 각 항목이 기본 키의 관점에서 고유하게 나타납니다"- 정확합니다. "중복 항목이 데이터베이스에 삽입되는 것을 방지하는 방법"- 중복 항목을 어떻게 정의합니까? 'CameraEntity' 리스팅이 수정 되었기 때문에 부분적으로 알 수있는 방법이 없습니다. – CommonsWare

+0

좋은 지적. 토론을 위해 몇 가지 필드를 추가했습니다. 일치하는 vendorId (이 경우에는 String)가있는 항목으로 중복 항목을 정의합니다. – andsec

+0

그러면 기본 키가됩니다. 또는 [고유 색인] (https://developer.android.com/topic/libraries/architecture/room.html#entities-indices- uniqueness)을 추가하십시오. – CommonsWare

답변

1

기본 키로 필요한 경우 자동 생성 기본 키만 사용하십시오. 데이터에 자연스러운 기본 키가있는 경우이를 사용하고 REPLACE이 수행 할 고유성을 결정합니다.

자동 생성 기본 키를 원하지만 일부 다른 열 (또는 열 조합)을 고유하게하려면 열에 a unique index을 추가하면 REPLACE에도 영향을줍니다.

+0

OnUpdate = CASCADE는 중복 항목을 대체하며이 링크는 여러 항목에 고유성을 적용하는 방법을 설명합니다. https://developer.android.com/training/data-storage/room/defining-data.html#indices-uniqueness – xrnd