gpt4 book ai didi

java - Android Room 和继承。错误: Multiple fields have the same columnName

转载 作者:行者123 更新时间:2023-12-01 16:47:30 27 4
gpt4 key购买 nike

我有一个继承关系,我正在尝试将其保留到 Room 数据库中。如果我删除继承关系,它会很好地工作,但是如果我不这样做,我会收到以下错误:

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) {

}

知道发生了什么吗?如果我用 Java 来做,它就可以正常工作。

谢谢

最佳答案

看来你遇到了 kapt Room 的 bug(可能没有,但我还没有找到合适的决定)

您可以尝试选择一个不太优雅的替代方案:

  1. 使用接口(interface)代替父类。

界面基本内容{
var uuid: 字符串
var 类别:字符串
}

  • 丢弃从子类继承的字段(因为它们无论如何都会被继承)。
  • 你的基类:

    @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 {
    }

    还有你的 child :

    @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() {
    }
  • 使用 Java 声明您的实体(因为您说它工作正常)。
  • 关于java - Android Room 和继承。错误: Multiple fields have the same columnName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61746610/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com