【问题标题】:Insert entities one-to-many relation in Room Android在 Room Android 中插入实体一对多关系
【发布时间】:2020-05-27 22:59:42
【问题描述】:

请帮忙!我只有在具有一对多关系的数据库中插入 pojo 时才有问题。 我有 pojos 并且误解了如何在数据库中插入所有列表???

@Entity
data class Street(
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
) {
    @Ignore
    var houses: List<House>? = listOf()
}

@Entity
data class House(
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0,
    var streetId: Int
) {
    @Ignore
    var flats: List<Flat>? = listOf()
}

@Entity
data class Flat(
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0,
    var houseId: Int
)

请帮帮我!

【问题讨论】:

标签: android kotlin android-room


【解决方案1】:

你需要去掉@Ignore注解,使用type converters

恕我直言,最好只保存 pojo 的 id 而不是整个对象 例如

@Entity
data class House(
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0,
    var streetId: Int,
    var flatIds: List<Int>? = listOf()
)

当您需要所有这些公寓时,只需通过这些 ID 查询 FlatDao


如果您仍想保存整个对象,可以将其转换为 Gson,然后再转换回来

class YourObjectConverter {

    @TypeConverter
    fun listToJson(value: List<YourObject>?): String {

        return Gson().toJson(value)
    }

    @TypeConverter
    fun jsonToList(value: String): List<YourObject>? {

        val objects = Gson().fromJson(value, List<YourObject>::class.java) as Array<YourObject>
        val list = objects.toList()
        return list
    }
}

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多