gpt4 book ai didi

Android Room `Insert` - 如何通过比较对象字符串来验证我不会输入同一对象?

转载 作者:行者123 更新时间:2023-11-30 04:55:57 26 4
gpt4 key购买 nike

我有以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com