我有一个DB,它有一个自定义的数据类型**FollowEntityType
**作为列。
@Entity(primaryKeys = arrayOf("id", "type"), tableName = "follow_info")
data class FollowInfoEntity(
@ColumnInfo(name = "id") var id: String,
@ColumnInfo(name = "type") var type: FollowEntityType,
)
因为它是一个自定义数据类型,所以我定义了一个类型转换器。
class FollowDatabaseTypeConverter {
@TypeConverter
fun toFollowEntity(entityType: String?): FollowEntityType? {
return FollowEntityType.from(entityType ?: Constants.EMPTY_STRING)
}
@TypeConverter
fun toString(entityType: FollowEntityType?): String? {
return entityType?.name
}
}
这工作正常,我能够在DB中存储/检索值。但是,在其中一个查询中,构建失败。
这就是查询。
@Query("select * from follow_info where type in (:entityTypeList)")
fun getFollowedEntitiesByType(entityTypeList: List<FollowEntityType>) : List<FollowInfoEntity>
生成失败,并出现以下错误。
Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
java.util.List<? extends FollowEntityType> entityTypeList, @org.jetbrains.annotations.NotNull()
错误是forentityTypeList字段,根据错误,此类型应该是DB中的一列。我已经有FollowIdentyType作为列类型之一。我不明白为什么它失败了。请帮助我,因为我没有找到任何解决方案来解决这个问题。
7条答案
按热度按时间6kkfgxo01#
当我更新了Kotlin库版本而没有更新房间数据库版本时,我发生了这个错误。
我使用的是Kotlin1.5.10和Room 2.2.5版本,导致了这个问题。将房间更改为2.3.0修复了错误。
rggaifut2#
我在Kotlin1.7.10 + Room 2.4.2中也看到了同样的问题。Kotlin1.6.21 +房间2.4.2没有问题。
Kotlin1.7.10 + Room 2.5.0-alpha 02也可以,所以我猜我们必须等待Room 2.5.0正式发布后才能使用Kotlin1.7.x
2022/8/4:在AndroidX团队发布了新版本的ROOM之后。Kotlin1.7.10 +房间2.4.3现在可以了。
2022/10/7:如果您使用的是Kotlin1.9.0或更高版本,使用Room 2.5.2编译将无法再次工作。必须使用Kotlin1.9.0 + Room 2.6.0-rc 01(或更高版本)。Google也建议使用KSP而不是KAPT。我正在使用Kotlin1.9.0 + KSP 1.9.0-1.0.13 + Room 2.5.2
gfttwv5a3#
当您使用房间查询注解时,从方法中删除挂起。像
老
删除挂起
新
8e2ybdfx4#
我得到了这个错误,当我试图执行这个查询在道接口;
通过添加@TypeConverters(MyConverter::class)来修复它,如下所示;
0yg35tkg5#
查询方法参数应该是可以转换为数据库列的类型或包含此类类型的List / Array。您可以考虑为此添加类型适配器。Kotlin.协程.Continuation<?superKotlin.Unit> continuation);
对于
Kotlin 1.9.0
和Room 2.5.2
,我删除了kapt
插件,并将其替换为ksp。ksp
和Kotlin具有兼容的版本。7dl7o3gd6#
请更新Kotlin和Room DB版本,它对我有效,我更改为Kotlin1.6.21 + Room 2.4.2.,它工作。
vyu0f0g17#
我用的是2.4.2号房间的android docs复制粘贴的文档
看起来这是房间<->Kotlin版本不匹配的表现
我确实得到
当我使用
当我使用
我没有得到这个错误