使用 Room,我想编写一个 Kotlin @Entity
,并将非原始数据类型作为其 @PrimaryKey
。例如:
@Entity
data class MyEntity(
@PrimaryKey val myType: MyType,
val text: String
)
我在非基本类型与字符串之间提供 TypeConverter。
class Converters {
@TypeConverter fun fromString(value: String): MyType = MyTypeUtil.parse(value)
@TypeConverter fun toString(myType: MyType) = myType.toString()
}
我还在我的数据库上正确注册了我的 TypeConverter
:
@Database(
entities = [
MyEntity::class
],
version = 1
)
@TypeConverters(
Converters::class
)
abstract class MyDatabase : RoomDatabase() {
abstract fun myDao(): MyDao
}
编译失败:
...MyDao_Impl.java:使用未经检查或不安全的操作。
使用 -Xlint 重新编译:未选中详细信息。
你能帮我找出问题所在吗? Room 允许我尝试做的事情吗?
最佳答案
是 - Room 允许非原始数据类型作为主键。
您的 TypeConverters
中存在错误 - 您必须提供从 String
到 MyType
以及从 MyType
到String
,因此方法 fromString
必须返回 MyType
(现在它返回 String
)。改变它,它应该可以工作:)
如果您仍然遇到奇怪的编译错误,请尝试在进行更改后清理项目。
关于android - Room 是否允许非原始数据类型作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123977/