作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 Room 实体 -
@Entity(tableName = "recent_search_table")
public class RecentSearchModel {
@PrimaryKey(autoGenerate = true)
private int ID;
private String query;
public RecentSearchModel(){
}
public RecentSearchModel(String query) {
this.query = query;
}
public void setID(int ID) {
this.ID = ID;
}
public int getID() {
return ID;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
@Override
public String toString() {
return "RecentSearchModel{" +
"query='" + query + '\'' +
'}';
}
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof RecentSearchModel)
return this.query.equalsIgnoreCase(((RecentSearchModel) obj).query);
return false;
}
}
和下面的 DAO -
@Dao
public interface RecentSearchDao {
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insert(RecentSearchModel model);
@Update
void update(RecentSearchModel model);
@Delete
void delete(RecentSearchModel model);
@Query("select * from recent_search_table")
LiveData<List<RecentSearchModel>> getRecentSearchList();
}
现在发生的事情是,我在我的 Room DB 中一次又一次地写入相同的对象。我希望 DAO 通过实际比较它们的 query
参数来防止添加相同的对象,使用我在实体类中构建的 equals()
方法。如您所见,我添加了 @Insert(onConflict = OnConflictStrategy.IGNORE)
,它什么都不做。我仍然看到重复值。
我该如何解决这个问题?
最佳答案
@Entity(indices = arrayOf(Index(value = ["query"], unique = true)))
data class RecentSearchModel(
@PrimaryKey(autoGenerate = true) val id: Int,
@ColumnInfo(name = "query") val query: String
)
将列标记为唯一后,您可以使用 @Insert(onConflict = OnConflictStrategy.IGNORE)
对于 Java,
@Entity(indices = {@Index(value = {"query"}, unique = true)})
关于Android Room `Insert` - 如何通过比较对象字符串来验证我不会输入同一对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59159978/
我是一名优秀的程序员,十分优秀!