如何创建非Room One的Room注释子类?

时间:2018-10-09 09:53:07

标签: kotlin android-room android-architecture-components

使用以下初始模型,Room似乎一切正常:

interface ParentModel {
    val name: String
    val age: Int
}

@Entity(tableName = "parents")
open class ParentRoom(
    @PrimaryKey override var name: String,
    override var age: Int)
    : ParentModel

但是,我不想使用接口,我希望它是一个 real 类,我可以为其创建实例:

open class ParentModel(open val name: String, open val age: Int)

@Entity(tableName = "parents")
open class ParentRoom(
    @PrimaryKey override var name: String,
    override var age: Int)
    : ParentModel(name, age)

不幸的是,Room不会编译它,因为它认为有两个名称相同的列:

ParentRoom.java:7: error: Multiple fields have the same columnName: name. Field names: name, name.
public class ParentRoom extends ParentModel {
       ^
e: ParentRoom.java:10: error: Field has non-unique column name.
    private java.lang.String name;

我要覆盖字段的原因是因为这是注释字段的唯一方法。这有可能吗?还是我不得不在Room中使用界面?

1 个答案:

答案 0 :(得分:-1)

可能您不需要覆盖父类的字段。尝试使用以下声明:

open class ParentModel(@PrimaryKey val name: String, val age: Int)

@Entity(tableName = "parents")
class ParentRoom(
    name: String,
    age: Int)
    : ParentModel(name, age)

在您的声明中,ParentRoom实际上具有两个名称相同的字段。房间处理器无法处理这种情况。