Roomには重複を避ける方法紹介します。
やることは2つ
- Entityにインデックスをつける
- INSERT時
OnConflictStrategy.IGNORE
をつける
Entityにインデックスをつける
Userデータがあると想定して、account_id
の重複をさせないようにします。
@Entity(indices = Index(value = ["account_id"], unique = true)) data class User ( @PrimaryKey(autoGenerate = true) val id: Int, @ColumnInfo(name = "account_id") val accountId: String, @ColumnInfo(name = "first_name") val firstName: String, @ColumnInfo(name = "last_name") val lastName: String )
肝はunique = true
の部分です。これをつけることでインデックスの値で重複を拒否されます。
INSERT時 OnConflictStrategy.IGNORE
をつける
InsertにはデータがConflictした時の挙動を設定することができます。
単純に重複を許さないなら OnConflictStrategy.IGNORE
でいいです。
@Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insertUser(user: User)
他には データを置き換えるOnConflictStrategy.REPLACE
やトランザクションを中止するOnConflictStrategy.ABORT
などがあるので、どうしたいのかにより設定することができます。
参考
Room エンティティを使用してデータを定義する | Android デベロッパー | Android Developers