Java Android房间和继承。错误:多个字段具有相同的列名称
我有一个继承关系,我正试图将其保存到房间数据库中。如果我删除继承关系,它会很好地工作,但是如果我不删除,则会出现以下错误:Java Android房间和继承。错误:多个字段具有相同的列名称,java,android,kotlin,android-room,Java,Android,Kotlin,Android Room,我有一个继承关系,我正试图将其保存到房间数据库中。如果我删除继承关系,它会很好地工作,但是如果我不删除,则会出现以下错误: error: Multiple fields have the same columnName: uuid. Field names: uuid, uuid. 这是基类 @Parcelize open class BaseContent(@PrimaryKey @ColumnInfo(name = "uuid") @Expose @SerializedName("uuid
error: Multiple fields have the same columnName: uuid. Field names: uuid, uuid.
这是基类
@Parcelize
open class BaseContent(@PrimaryKey @ColumnInfo(name = "uuid") @Expose @SerializedName("uuid") open
var uuid: String,
@ColumnInfo(name = "category") @Expose @SerializedName("category")
open var category: String) : Parcelable {
}
这是一个儿童班
@Entity(tableName = "article")
@Parcelize
data class Article(override var uuid: String,
override var category: String,
@ColumnInfo(name = "message") @Expose @SerializedName("message") var message:
String,
@ColumnInfo(name = "permanent") @Expose @SerializedName("permanent") var
permanent: Boolean) : BaseContent(uuid, category) {
}
@Entity(tableName = "post")
@Parcelize
data class Post(override var uuid: String,
override var category: String,
@ColumnInfo(name = "timestamp") @Expose @SerializedName("timestamp") var
timeStamp: String,
@ColumnInfo(name = "title") @Expose @SerializedName("title") var title: String,
@ColumnInfo(name = "description") @Expose @SerializedName("description") var
description: String) : BaseContent(uuid, category) {
}
这是另一个儿童班
@Entity(tableName = "article")
@Parcelize
data class Article(override var uuid: String,
override var category: String,
@ColumnInfo(name = "message") @Expose @SerializedName("message") var message:
String,
@ColumnInfo(name = "permanent") @Expose @SerializedName("permanent") var
permanent: Boolean) : BaseContent(uuid, category) {
}
@Entity(tableName = "post")
@Parcelize
data class Post(override var uuid: String,
override var category: String,
@ColumnInfo(name = "timestamp") @Expose @SerializedName("timestamp") var
timeStamp: String,
@ColumnInfo(name = "title") @Expose @SerializedName("title") var title: String,
@ColumnInfo(name = "description") @Expose @SerializedName("description") var
description: String) : BaseContent(uuid, category) {
}
知道发生了什么吗?如果我用Java做的话,效果就很好了
谢谢您似乎遇到了kapt Room的bug(可能不是,但我还没有找到合适的决定) 您可以尝试选择一种不那么优雅的替代方案:
接口基本内容{
变量uuid:String
变量类别:字符串
}
@Parcelize
open class BaseContent(
@PrimaryKey @ColumnInfo(name = "uuid") @Expose @SerializedName("uuid") open var uuid: String = "",
@ColumnInfo(name = "category") @Expose @SerializedName("category") open var category: String = "") : Parcelable {
}
还有你的孩子:
@Entity(tableName = "article")
@Parcelize
data class Article(
@ColumnInfo(name = "message") @Expose @SerializedName("message") var message: String,
@ColumnInfo(name = "permanent") @Expose @SerializedName("permanent") var permanent: Boolean) : BaseContent() {
}
我在可分配和继承方面也有类似的问题。我所做的是将基类及其变量更改为抽象类,从而消除了错误并按预期工作。因此:
abstract class BaseContent : Parcelable { abstract var baseVar: Int? }
谢谢,我最终使用了一个界面,但对我来说只是一个补丁。我仍然不明白为什么它不起作用。如果它是一个bug,那么由于设计师的错误,“它不起作用:-)可能有更正确的方法,但我还没有找到