我正在使用Room for DB,并有一个名为' Products'的表格。 产品实体类具有字段ArrayList' String'标签
@Entity Class Products { some auto generate primary key; String name; ArrayList<String>tags;}
我想按标签搜索产品,那该怎么做? 我们可以使用&#39;标签&#39;在where子句?我在下面试过但没有工作:
select name from Products where tags IN (:value)
List<String> getSearchedProducts(String value);
使用此类型转换器保存列表。
public class StringListConverters {
private static Gson gson = new Gson();
@TypeConverter
public static ArrayList<String> fromString(String data) {
Type listType = new TypeToken<ArrayList<String>>() {}.getType();
return gson.fromJson(data, listType);
}
@TypeConverter
public static String fromArrayList(ArrayList<String> list) {
return gson.toJson(list);
}
}
对于按名称进行搜索,它可以正常工作,但按标签进行搜索则不然。 不仅仅是语法,错误修复等,我正在寻找在房间DB中搜索集合的方法。
答案 0 :(得分:2)
我得到了答案,非常简单。 这就是我们如何搜索存储在列中的ArrayList。
.child{
height:100vh;
}
这也是有道理的,因为Room将列表转换为String条目并保存在列中,根据我的假设,在搜索ArrayList时,它将像foreach循环一样在该列中循环。
要按名称或标签搜索,您将这样做:
select name from Products where tags Like :value
List<String> getSearchedProducts(String value);
答案 1 :(得分:0)
你想要实现的是什么,我遇到了same问题。在我的情况下,我有String[]
,如果您提供以逗号分隔的String
,则它不起作用,但它也可以与ArrayList
一起使用。
如果您没有经常操作tags
列表,并且在创建后没有添加元素,请使用String[]
。这样您就不必使用TypeConverter
。