如何在Android Room实体中覆盖PrimaryKey

3
我对Android Room库还不熟悉。我使用Room数据库来存储应用程序的配置数据。 我声明了两个类作为@Entity:Operation和OperationType。
Operation扩展了OperationType超类。OperationType有一个成员被声明为@PrimaryKey:operation 我想在Operation类中定义一个新的@PrimaryKey,但在这一点上,我在编译过程中遇到了错误:compil err 我不明白为什么会出现这个错误,以及我做错了什么。根据Room文档,覆盖是可能的:PrimaryKey | Android Developers。任何想法或建议都将不胜感激 :)
1个回答

0

我有一种感觉,这可能是某种错误,应该只是一个警告。

起初我遇到了这个问题,使用另一个答案进行测试。然后通过右键单击消息并禁用“显示警告”来编译它。

  • 如果您清理项目,它会重新出现。

在所有尝试的情况下,Room仍会在与@Database注释类同名的类中生成createAllTables方法,后缀为_Impl(在生成的Java中),其中包括两个表,例如:

    _db.execSQL("CREATE TABLE IF NOT EXISTS `OperationType` (`operationTypeId` INTEGER NOT NULL, PRIMARY KEY(`operationTypeId`))");
    _db.execSQL("CREATE TABLE IF NOT EXISTS `Operation` (`operationId` INTEGER, `operationTypeId` INTEGER NOT NULL, PRIMARY KEY(`operationId`))");
  • 我已经按照所示使用了这些类,只有单个成员变量(但请注意,它仅更改主键,成员变量operationTypeId成员变量仍从超类复制)。

此外,实际运行应用程序并强制访问数据库而不做其他任何操作,结果是一个包含两个表的数据库:

enter image description here


嗨MikeT,感谢你的回答。事实上,我在反复重建项目时陷入了编译错误的困境,但是如果我运行应用程序,它会正常工作,尽管出现了错误。非常奇怪...问候 - Joe T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接