Вставьте отношение сущностей один-ко-многим в Комнате Android - PullRequest
3 голосов
/ 12 февраля 2020

Помогите пожалуйста! У меня проблема только со вставками pojos в базах данных с отношением один ко многим. У меня есть 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
)

Пожалуйста, помогите мне, ребята!

1 Ответ

2 голосов
/ 12 февраля 2020

Вам необходимо удалить @Ignore аннотации и использовать преобразователи типов .

ИМХО лучше сохранять только идентификаторы pojo, а не весь объект, например

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

И когда вам нужны все эти квартиры, просто запросите 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
    }
}
...