У меня есть эта настройка комнаты, где мой объект имеет трехуровневую иерархию. Объект верхнего уровня - Parent
, у которого есть список Child
, а у каждого дочернего элемента есть список SecondLevelChild
. Я хочу быть в состоянии получить всю иерархию как один объект LiveData. Структура моей модели выглядит следующим образом:
@Entity(tableName = "parent")
data class Parent(
@PrimaryKey
var parentId: String,
var title: String,
@Ignore
var children: MutableList<Child> = ArrayList()
)
И дочерний класс
@Entity(tableName = "child",
foreignKeys = [ForeignKey(
entity = Parent::class,
parentColumns = ["parentId"],
childColumns = ["parentId"],
onDelete = CASCADE
)])
data class Child(
@PrimaryKey
var childId: String,
var parentId: String,
var title: String,
@Ignore
var childrenOfChild: MutableList<SecondLevelChild> = ArrayList()
)
И дочерний класс третьего уровня
@Entity(tableName = "secondLevelChild",
foreignKeys = [ForeignKey(
entity = Child::class,
parentColumns = ["childId"],
childColumns = ["childId"],
onDelete = CASCADE
)])
data class SecondLevelChild(
@PrimaryKey
var secondLevelChildId: String,
var childId: String,
var title: String,
)
Я могу сохранитьданные в комнату DB с помощью цикла. Однако проблема заключается в получении всего набора данных в виде отдельного объекта типа LiveData.
Я могу получить список дочерних объектов в родительском объекте следующим образом:
fun getParent(parentId: String) {
var parentLiveData = room.parentDao().getParent(parentId)
parentLiveData = Transformations.switchMap(parentLiveData) { parent ->
val childLiveData = room.childDao().getChildrenByParentId(parentId)
Transformations.map(childLiveData) { children ->
parent.children.addAll(children)
elearning
}
}
}
Эта логикапрекрасно работает для одноуровневой иерархии. Но как мне перевести эту логику на другой уровень? Как добавить список SecondLevelChildren для каждого элемента в списке детей?