我的数据组织方式与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)
}
}
还有其他的方法吗?非常感谢对如何以正确的“Room”方式完成此操作的任何帮助。