我可以在Room persistence中为两个实体使用一个Model吗?

时间:2018-02-05 10:46:36

标签: android kotlin android-room android-database

我想知道,在Kotlin中使用Room Persistence时,是否可以为两个实体使用一个模型?

例如,我必须创建两个寻呼机,它们是一般页面和星形页面。 它们都有以下字段..

  

id:String?,caption:String?,imageUrl:String?,isUserLike:Boolean   (还有更多)

数据来自两个独立的服务,我想单独保存。 我怎么能这样做,或者有什么方法可以解决这个问题?

谢谢

P.S。我是Kotlin和Room persistence的初学者。

1 个答案:

答案 0 :(得分:0)

您可以创建一个包含所有这些公共字段的单独抽象类

abstract class BaseModel(
    @PrimaryKey
    var id: String? = null,
    var caption: String? = null,
    var imageUrl: String? = null,
    ...
) {
    ...
}

然后将该抽象类扩展到其他类

@Entity(tableName = "a_model")
data class AModel (
    mId: String? = null,
    mCaption: String? = null,
    mImageUrl: String? = null,
    ...
): BaseModel(id = mId,
        caption = mCaption, 
        imageUrl = mImageUrl,
        ...) {
    ...
}

您还可以添加该实体独有的其他字段

@Entity(tableName = "b_model")
data class BModel (
    mId: String? = null,
    mCaption: String? = null,
    mImageUrl: String? = null,
    ...
    var nonCommonField: String? = null, // like this
): BaseModel(id = mId,
        caption = mCaption, 
        imageUrl = mImageUrl,
        ...) {
    ...
}

如果我没记错的话,Android会要求字段为每个字段或空构造函数设置默认值。