如何在“房间”的对象中保留自定义对象

时间:2018-07-30 14:43:45

标签: java android kotlin android-room

我有这个实体

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并继续前进。

1 个答案:

答案 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更可取。