@Entity(tableName = "Entity")
data class Entity(val recipients: List<ID>?) {
@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = true) var id: Long = 0
}
如您所见,它包含ID列表(typealias ID = Long)
所以,我做了TypeConverter:
@TypeConverter
fun getlistofLongs(data: String?): List<ID> {
if (data == null) {
return Collections.emptyList()
}
val listType = object : Typetoken<List<Long>>() {}.type
return gson.fromJson(data, listType)
}
@TypeConverter
fun convertListToString(ids: List<ID>): String = gson.toJson(ids)
@Query("select count(*) from Message where recipients in (:recipients)")
fun count(recipients: List<ID>?): Int
如您所见,我需要比较两个列表(实体列表和方法列表)并从方法列表中获取包含Id的所有实体,但此查询始终返回0.我读过TypeConverter列表可能有问题,但我可以找不到任何解决方案.
解决方法:
用@RawQuery解决它:
" WHERE recipients LIKE ${recipients.joinToString(",", "\"", "\"")}"
结束编辑TypeConvertor:
@TypeConverter
fun getlistofLongs(data: String?): List<Long> {
if (data == null) {
return Collections.emptyList()
}
val listType = object : Typetoken<List<Long>>() {}.type
return gson.fromJson("[$data]", listType)
}
@TypeConverter
fun convertListToString(ids: List<Long>?): String? {
if (ids == null) return null
var idsstring = gson.toJson(ids)
idsstring = idsstring.replace("]", "")
idsstring = idsstring.replace("[", "")
return idsstring
}