Room: 使用Converter过后的Query语句 SET注意

Converter


class Converters {
    
    
    @TypeConverter
    fun fromPreferUsrNames(json: String?): List<String>?{
    
    
        return Gson().fromJson<List<String>>(json, getTypeToken<List<String>>())
    }

    @TypeConverter
    fun preferUsrNamesToString(usrNames: List<String>?): String?{
    
    
        val json = Gson().toJson(usrNames)
        return json
    }

}

Data

@Entity(tableName = "groups")
data class Group(
    @PrimaryKey val groupId: Int
){
    
    
    var preferUsrNames: List<String>? = 
}

想在数据库里保存一个List对象,但是Room不允许List对象直接保存,所以用Converter转成了Json来保存

SET

直接修改某一行的该属性时,如果还传List的话,Room不会转换并且会直接把这个参数搞成null

    @Query("UPDATE groups SET preferUsrNames =:usrNames WHERE groupId =:groupId")
    suspend fun updateGroupPreferenceUsrNames(groupId: Int, usrNames: List<String>?)

相当于usrNames这个参数取null

所以必须你提前转好Json,直接传已经转换好格式的数据进去,才能正确存入

	@Query("UPDATE groups SET preferUsrNames =:usrNames WHERE groupId =:groupId")
	suspend fun updateGroupPreferenceUsrNames(groupId: Int, usrNames: String?)

猜你喜欢

转载自blog.csdn.net/qq_43709922/article/details/104664237