TypeConverters在@Query中不适用于集合 [英] TypeConverters not working for Collections in @Query
问题描述
我有一个称为事件"的实体,其定义如下:
I've an entity called Events which is defined as follows:
@Entity(tableName = "Events")
data class Event(@PrimaryKey val id: Long, val name: String, val venues: Set<String>, val rating: Int)
我有一对@TypeConverter
方法用于处理Set<String>
:
I've a pair of @TypeConverter
methods for handling Set<String>
:
@TypeConverter
fun fromStringToStringSet(str: String): Set<String> = str.split("<|>")
@TypeConverter
fun fromStringSetToString(set: Set<String>): String = set.joinToString("<|>")
在我的Dao
中,有一个用@Query
注释的方法,如下所示:
In my Dao
, I've a method annotated with @Query
as follows:
@Query("UPDATE Events SET name = :name, venues = :venues WHERE id = :id")
fun updateAndRetainRating(id: Long, name: String, venues: Set<String>)
当我尝试更新具有2个场所的事件时,出现运行时错误,告诉我无法编译SQL.生成的SQL是:
When I try to update an event with 2 venues, I get a runtime error telling me that the SQL couldn't be compiled. The generated SQL is:
UPDATE Events SET name = ?, venues = ?,? WHERE id = ?
这显然是错误的.查看生成的代码,Room正在获取Set<String>
的大小并添加相同数量的?
s.
This is obviously wrong. Looking into the generated code, Room is getting the size of Set<String>
and adding the same number of ?
s.
为什么不使用我的TypeConverter
?在其他查询(@Insert
和@Query
(对于SELECT
))中,我没有遇到这个问题.其他TypeConverter
也可以正常工作.
Why isn't my TypeConverter
being used? I don't face this issue in other queries(@Insert
and @Query
(for SELECT
)). Other TypeConverter
s are also working fine.
如果我使用List<String>
+ TypeConverter
s代替Set<String>
,也会发生相同的问题.
The same issue also occurs if I use List<String>
+ TypeConverter
s instead of Set<String>
.
推荐答案
此解决方案对我有用: TypeConverter在更新List< Boolean>时不起作用在会议室数据库中
This solution worked for me: TypeConverter not working when updating List<Boolean> in Room Database
基本上,将List<String>
替换为ArrayList<String>
.
这篇关于TypeConverters在@Query中不适用于集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!