使用 Room 的父 class 的主键?

Primary key from parent class using Room?

我正在使用 Android 架构组件。因此使用 Room 'ORM'。我有一个 class EQPreset 有一个成员 String presetName。这个 class 有一个名为 UserDefinedEQPreset 的子 class,它包含一个 int[] arr。我已经使用 @Entity 注释声明了子 class EQPreset 和实体,因为我只想将此子类型存储在数据库中。现在我想将父 class 的 (EQPreset) 成员 String presetName 用作 primary key。如何在使用 Room 时将父 class 的成员声明为 primary key。我知道 @Primarykey 注解是用来声明主键的。但是如何将父 class 的成员用作 primary key.

@PrimaryKey 注释放在父 class 字段上。完成。

例如,在 this sample app 中,我有一个 abstract class Plan@PrimaryKey public final String id。所有子classes,例如Trip,继承@PrimaryKey定义。

并非所有内容都能正确继承(例如,@TypeConverters 适用于字段但不适用于 classes),但 @PrimaryKey 似乎可以。

@Entity(primaryKeys = ["presetName"])
class UserDefinedEQPreset extends EQPreset{
    ...
}

我想这就是您要找的。使用 Entity 注释上的 primaryKeys 属性指定主键。您还可以使用它来指定复合主键。