私はアプリケーションでデータベースのやり取りにAndroidのRoomライブラリを使用しています。重複するエントリがデータベースに挿入されないようにする方法がわかりません。Androidルームに重複したエンティティが挿入されました
私は何かが行方不明になっているように感じるが、これは簡単なように思える。私は役に立たない件名に関連する言葉のさまざまな組み合わせをGoogleで検索しました。
私は基本的に、サンプルの1つを挿入したりクエリしたりするために使用しています。
エンティティ:
@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);
}
、データが挿入されなければならないときに、いくつかのルールを設定する方法はありますか?私が読んだ1つの記事では、自動増分IDによって各項目がプライマリキーの点で一意であると述べています。そうだとすれば、このライブラリを使っている他の人たちはどうやってそれを説明していますか?
ありがとうございます!
"自動インクリメントIDにより、各項目がプライマリキーの点で一意になりました" - 正しい。 "重複するエントリがデータベースに挿入されないようにする方法" - どのように "重複するエントリ"を定義していますか?あなたの 'CameraEntity'リストが編集されたため、私たちは知る方法がありません。 – CommonsWare
良い点。私は議論のためにいくつかのフィールドを追加しました。私は、一致するvendorId(この場合はString)を持つものとして重複エントリを定義します。 – andsec
それをプライマリキーにします。または、[一意のインデックス](https://developer.android.com/topic/libraries/architecture/room.html#entities-indices- uniqueness)を追加します。 – CommonsWare