我有这个实体
data class Asset(
@SerializedName("id")
@Expose
@PrimaryKey
var id: String = "",
@SerializedName("asset_name")
@ColumnInfo(name="asset_name")
@Expose
var name: String = "",
@SerializedName("asset_type_name")
@ColumnInfo(name="asset_type_name")
@Expose
var typeName: String = "",
@SerializedName("status")
@Expose
var status: Int = 0,
@SerializedName("group")
@Expose
var group: Group? = null
)
“组”也是一个实体,因此在持久化资产时是否还可以将“组”持久化到其自己的表(如果尚不存在)?
或者应该只使用TypeConverters并继续前进。
答案 0 :(得分:1)
使用可以使用外键或嵌套对象。
在示例中使用外键可能如下所示:
@Entity(foreignKeys = @ForeignKey(entity = Group.class,
parentColumns = "id",
childColumns = "group_id"))
data class Asset(
// ...
@ColumnInfo(name = "group_id")
var groupId: Int? = null
)
在这种情况下,由于Room不允许对象引用,因此您的应用程序负责基于Group
来获取groupId
。
嵌入对象可能如下所示:
data class Asset(
// ...
@SerializedName("group")
@Expose
@Embedded
var group: Group? = null
)
请注意,在这种情况下,Group
的字段将嵌入到Asset
的表中。
要选择的两个选项中的哪个取决于用例。不过,两者都比使用TypeConverters
更可取。