【发布时间】:2019-05-22 12:37:19
【问题描述】:
我在我的 android 应用程序中使用房间数据库。
向用户插入数据时,我已添加:
// Not working onConflict = OnConflictStrategy.IGNORE/REPLACE
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertUser(User users);
但它不起作用。我也尝试过 onConflictStrategy.REPLACE 但它仍然无法正常工作。
用户类(有Getter和Setter):
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "id")
private Integer id;
@ColumnInfo(name = "user_name")
@NonNull
private String name;
@ColumnInfo(name = "email")
private String email;
public User(@NonNull String name, String email) {
this.name = name;
this.email = email;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) &&
Objects.equals(email, user.email);
}
@Override
public int hashCode() {
return Objects.hash(name, email);
}
}
我也查看了其他问题并尝试了他们的解决方案,但仍然面临问题。
【问题讨论】:
-
“不工作”到底是什么意思?您的具体症状是什么?
-
@CommonsWare onConflictStrategy.REPLACE 和 onConflictStrategy.IGNORE 不起作用。它仍然插入重复记录
-
AFAIK,
OnConflictStrategy只是使用INSERT OR(例如INSERT OR REPLACE),所以it only affectsUNIQUE,NOT NULL,CHECK, andPRIMARY KEYconstraints。您插入的重复项是否与现有记录具有相同的主键?还是您希望冲突会考虑您的姓名和电子邮件字段? -
@CommonsWare 这是第一次插入。我期待名称和电子邮件字段的冲突。我们能做到吗?
-
您需要为这些列添加唯一索引。
标签: android android-room