在我的会议室数据库中,我有一个实体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类型,它是将String转换为另一个String的类。
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()
}
}
}
所以现在我要进行选择查询,并在messages.body字段上使用Sql的“ like”函数。
当我运行以下查询时,尽管我知道文本作为EncryptString存在于主体中,但没有任何结果
@Query("Select body from messages where body like :text")
fun searchMessage(text: String): List<EncryptString>
我做错了什么...?
我认为您需要以以下形式更改您的Dao方法:
@Query("Select body from messages where body like :text")
fun searchMessage(text: EncryptString): List<EncryptString>
只需将输入参数类型从String
更改为EncryptString