Room是否允许非原始数据类型作为主键?

时间:2018-05-01 21:19:01

标签: android kotlin android-room

使用Room,我想写一个非原始数据类型的Kotlin @Entity作为@PrimaryKey。例如:

@Entity
data class MyEntity(
    @PrimaryKey val myType: MyType,
    val text: String
)

我在非原始类型与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: uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details.

你能帮我找到问题吗?房间是否允许我尝试做什么?

1 个答案:

答案 0 :(得分:1)

是 - Room允许非原始数据类型作为主键。

您的TypeConverters中存在错误 - 您必须提供从StringMyType以及MyTypeString的转换,因此方法{{1} }必须返回fromString(现在它正在返回MyType)。改变它,它应该工作:)
如果您仍然遇到奇怪的编译错误,请在进行更改后尝试清理项目。