如何实现 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
}
}
}
该错误与升级数据库版本无关,因为我删除了上一个版本。
提前谢谢!
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报