Я пытаюсь сделать запрос, в котором я хочу сопоставить поле со списком строк. Поле изначально является списком, который сохраняется в виде строки через TypeConverter. Если я сопоставлю это поле с предложением LIKE, оно будет работать:
val sql = SimpleSQLiteQuery(
"""
SELECT * FROM practice
WHERE categories LIKE '%advaita%'
ORDER BY id $order LIMIT $limit
"""
)
return searchPracticesByCategory(sql)
Но если я попытаюсь использовать предложение IN для передачи списка строк, я не получу результатов:
val sql = SimpleSQLiteQuery(
"""
SELECT * FROM practice
WHERE categories IN ('%advaita%', '%meditation%')
ORDER BY id $order LIMIT $limit
"""
)
return searchPracticesByCategory(sql)
В Дао я прокомментировал запрос следующим образом:
@RawQuery(observedEntities = [Practice::class])
abstract fun searchPracticesByCategory(query: SupportSQLiteQuery): Observable<List<Practice>>
Поле:
@TypeConverters(ListConverter::class)
val categories: List<String>? = null
И преобразователь типов:
class ListConverter: Serializable {
@TypeConverter
fun restoreList(listOfString: String?): List<String>? {
return Gson().fromJson(
listOfString,
object : TypeToken<List<String>?>() {}.getType()
)
}
@TypeConverter
fun saveList(listOfString: List<String>?): String? {
return Gson().toJson(listOfString)
}
}
Любая идея, в чем проблема может быть?