代码之家  ›  专栏  ›  技术社区  ›  B W

Room是否允许非基本数据类型作为主键?

  •  2
  • B W  · 技术社区  · 6 年前

    使用Room,我想写一个Kotlin @Entity 将非基元数据类型作为其 @PrimaryKey .例如:

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

    我在非原语类型与字符串之间提供一个类型转换器。

    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 回复  |  直到 6 年前
        1
  •  2
  •   Michał Baran    6 年前

    是-房间允许非基本数据类型作为主键。

    您的 TypeConverters -您必须提供从 String MyType 和来自 MyType(我的类型) 一串 ,so方法 fromString 必须返回 MyType(我的类型) (现在又回来了 一串 )。更改此选项,它应该会工作:)
    如果仍然存在奇怪的编译错误,请在进行更改后尝试清理项目。