gpt4 book ai didi

Android Room 多个字段具有相同的 columnName

转载 作者:行者123 更新时间:2023-12-04 22:17:58 36 4
gpt4 key购买 nike

我正面临 Room 的特定问题。我有一个对象

@Entity(tableName = "classifieds")
data class ClassifiedBean(
@PrimaryKey
@ColumnInfo(name = "id")
@SerializedName("id")
var id: String,

@Embedded
@SerializedName("client")
var clientBean: ClientBean,

@Embedded
@SerializedName("location")
var locationBean: LocationBean
)

这里我有我的对象 LocationBean 和 ClientBean。

问题出在我的 ClientBean 内部,我还有一个具有相同属性(地址、邮政编码、城市、国家...)的 LocationBean。
data class ClientBean(
@ColumnInfo(name = "client_id")
@SerializedName("id")
var id: Int,

@ColumnInfo(name = "name")
@SerializedName("name")
var name: String,

@Embedded
@SerializedName("location")
var locationBean: LocationBean
)

在这里你可以找到我的 LocationBean
data class LocationBean (
@ColumnInfo(name = "location_id")
@SerializedName("locationId")
var id: Int,

@ColumnInfo(name = "country")
@SerializedName("country")
var country: String,

@ColumnInfo(name = "city")
@SerializedName("city")
var city: String,

@ColumnInfo(name = "address")
@SerializedName("address")
var address: String,

@ColumnInfo(name = "postal_code")
@SerializedName("postalCode")
var postalCode: String,

)

这是我的错误:
error: Multiple fields have the same columnName: location_id. Field names: clientBean > locationBean > id, locationBean > id.

解决方案之一是创建 2 个具有相同属性的不同对象,但我想知道他们是否有其他解决方案?

谢谢您的帮助

最佳答案

尝试使用带有嵌入的前缀,例如 @Embedded(prefix = "prefix_")。
希望将您的 ClientBean 类更改为以下代码可以正常工作

data class ClientBean(
@ColumnInfo(name = "client_id")
@SerializedName("id")
var id: Int,

@ColumnInfo(name = "name")
@SerializedName("name")
var name: String,

@Embedded(prefix = "client_bean_")
@SerializedName("location")
var locationBean: LocationBean
)

因为当您使用@Embedded 时,Room 会将 Embedded 类的字段添加为同一张表中的列。因此,当嵌入式类和所有者类之间存在字段名称重复的可能性时,请尝试使用前缀以避免重复。
添加前缀后 Room 会做什么,它将在嵌入类的列名之前添加前缀。引用 documentation to read more

关于Android Room 多个字段具有相同的 columnName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581566/

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