【发布时间】:2019-05-01 15:37:01
【问题描述】:
我的数据的组织方式与您通常在 SQL 数据库中所期望的有所不同,但我无法改变这一点。因此,我有相关实体,其中父级使用一组子 ID 引用其子级:
data class Parent(
@PrimaryKey val id: Int,
val children: List<Int>
)
data class Child(
@PrimaryKey val id: Int
)
我想要的是一个单一的查询或 DAO 函数,它可以在一次调用中检索父级及其子级。所以我可能必须创建一个组合实体,如:
data class ParentWithChildren(
val parent: Parent,
val children: List<Child>
)
但是获取结果的推荐方法是什么(最好是 LiveData)?是否有可以检索结果的@Query 注释或者我必须执行以下操作:
@Query("SELECT * FROM parent WHERE id = :id")
fun getParent(id: Int): LiveData<Parent>
@Query("SELECT * FROM child WHERE id IN (:ids)")
fun getChildren(ids: List<Int>): List<Child>
fun getParentWithChildren(id: String): LiveData<ParentWithChildren> {
return Transformations.map(getParent(id)) { parent ->
val children = getChildren(parent.children)
ParentWithChildren(parent, children)
}
}
或者甚至有不同的方法来解决这个问题?非常感谢有关如何以正确的“类似房间”的方式执行此操作的任何帮助。
【问题讨论】:
-
使用@Relation 你可以参考这里-developer.android.com/reference/android/arch/persistence/room/…
-
我不这么认为。如果我正确理解@Relation,它只在 Child 引用其 Parent 时才有效,这正是我的问题:只有 parent 引用其子代。
标签: android android-room