【问题标题】:Can I using one Model for two entities in Room persistence?我可以在房间持久性中为两个实体使用一个模型吗?
【发布时间】:2018-02-05 10:46:35
【问题描述】:

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

例如,我必须创建两个寻呼机,即普通页和星标页。 他们都有以下字段..

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

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

谢谢

附:我是 Kotlin 和 Room 持久性的初学者。

【问题讨论】:

    标签: android kotlin android-room android-database


    【解决方案1】:

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

    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 Room 将要求每个字段都有一个默认值或一个空的构造函数。

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多