我正面临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内部,我还有一个具有相同属性(地址,postalCode,城市,国家/地区...)的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个具有相同属性的不同对象,但我想知道它们是否还有其他解决方案?
谢谢您的帮助
答案 0 :(得分:4)
尝试使用嵌入的前缀,例如@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