В моей базе данных комнат у меня есть сущность MessageDto с полем тела для шифрования. Для этого я использую TypeConverters, как показано ниже.
@Entity(tableName = "messages")
data class MessageDto(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "message_id")
var messageId: Long,
@TypeConverters(EncryptString.Converter::class)
@ColumnInfo(name = "body", defaultValue = "")
var body: EncryptString
.....
Как вы можете видеть, тело является типом EncryptString, который является классом, который превращает строку в другую строку.
class EncryptString(var value: String = "") {
class Converter {
@TypeConverter
fun decrypt(encrypted: String): EncryptString {
return EncryptString(encrypted.toDecrypt())
}
@TypeConverter
fun encrypt(decrypted: EncryptString): String {
return decrypted.value.toEncrypt()
}
}
}
Итак, теперь я хочу сделать запрос на выборку и использовать функцию «like» Sql для поля messages.body.
Когда я запускаю приведенный ниже запрос, я не получаю никаких результатов, хотя знаю, что текст существует в теле как EncryptString
@Query("Select body from messages where body like :text")
fun searchMessage(text: String): List<EncryptString>
Что я делаю не так ...?