返回

如何实现 Room 实体的继承(Android、Kotlin)

发布时间:2022-05-10 05:48:07 235
# java# java# 数据库# 数据

我是 Room 新手,没有找到任何与此相关的帖子。我有两个类:BaseModel 和 ChildModel。ChildModel 是 Room 实体类,但 BaseModel - 不是。如何正确从 ChildModel 扩展 BaseModel?我试着按照下面的代码来做......

BaseModel.kt:

@Parcelize
open class BaseModel(
    open val id: String,
    open var name: String,
    open var creator: String,
    open var dateOfLastEdit: Timestamp,
    open var contributors: List,
    open var color: Int,
    open var offline: Boolean
) : Parcelable {...} 

ChildModel.kt(用于 firebase 的空构造函数):

@Entity
@Parcelize
data class ChildModel(
    @PrimaryKey(autoGenerate = false)
    override val id: String = "",
    override var name: String = "",
    override var creator: String = "",
    @TypeConverters(DateTypeConverter::class)
    override var dateOfLastEdit: Timestamp = currentTime(),
    @TypeConverters(ListStringConverter::class)
    override var contributors: List = emptyList(),
    override var color: Int = NO_COLOR,
    override var offline: Boolean = false,
    var text: String = "",
    var lastEditTextPosition: Int = 0,
    var lastEditNamePosition: Int = 0,
    var lastUserEdited: String = ""
) : Parcelable, BaseModel(id, name, creator, dateOfLastEdit, contributors, color, offline) {
    constructor() : this("", "", "", currentTime(), emptyList(), NO_COLOR, false, "", 0, 0, "") 
...
}

...但它给出了错误:对于从 BaseModel 覆盖的所有字段,“字段具有非唯一的列名” 。顺便说一句,当创建 BaseModel 作为接口时,它会成功构建。

我的数据库类:

@Database(entities = [ChildModel::class], version = 1)
@TypeConverters(DateTypeConverter::class, ListStringConverter::class) 
    abstract class CustomDatabase : RoomDatabase() {
    abstract fun childModelDao(): ChildModelDao

    companion object {
        var INSTANCE: CustomDatabase? = null

        fun getDatabase(context: Context): CustomDatabase? {
            if (INSTANCE == null) {
                synchronized(CustomDatabase::class) {
                    INSTANCE = Room.databaseBuilder(
                        context.applicationContext,
                        CustomDatabse::class.java,
                        DATABASE
                    ).build()
                }
            }
            return INSTANCE
        }
        fun destroyDatabase() {
            INSTANCE = null
        }
    }
}

该错误与升级数据库版本无关,因为我删除了上一个版本。
提前谢谢!

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(2)
按点赞数排序
用户头像