【问题标题】:Android Room - Getting all base children of parentAndroid Room - 获取父母的所有基本孩子
【发布时间】:2020-10-23 18:20:54
【问题描述】:

现在,我的关系层次结构是 A -> (A -> ... -> A) -> B,其中有一定数量(也可以是 0)的 A 在中间,每个箭头都是一对多的关系。

  • 每个A“树”都将以B结尾。
  • 每个A 都有AB 作为孩子(但不是两者都有)

我的实体是:

@Entity(tableName = "table_A")
data class A(
    id,        // ID of the A
    parentAid  // ID of the parent A (nullable)
)
@Entity(tableName = "table_B")
data class B(
    id,        // ID of this B
    parentAid  // ID of the parent A (non-nullable)
)

目前,我的方法是查询"SELECT COUNT(*) FROM table_A WHERE parentAid = :id" 以获取父母拥有的A 的数量。如果此数字大于 0,请对每个孩子重复 A。否则,运行SELECT * FROM table_B WHERE parentAid = :id 以获取添加到列表中的B 列表。

这是一种有效的做事方式吗? Room 中是否有可以轻松做到这一点的查询?

【问题讨论】:

  • 我正面临着确切的问题......你找到任何线索了吗?
  • dirtsimple.org/2010/11/… 看看这个链接,它让你可以在 sql 中提取一行的所有基本子项,然后你可以将房间数据库关系与表 B 建立关系

标签: android sqlite android-room


【解决方案1】:

可以如下实现:(我使用的是Kotlin语法,所以请联系将解决方案转换为Java)

创建另一个数据类,如下所示:

data class TableAWithTableB(
  @Embedded val tableA: TableAEntity,
  @Relation(
    parentColumn = "parentAid",
    entityColumn = "parentAid"
  )
  val tableBList: List<TableBEntity>
)

现在从您的房间数据库中选择如下:

@Transaction
@Query("SELECT * FROM table_A WHERE parentAid=:id")
fun selectTableAWithTableB(id:Int): List<TableAWithTableB>

在上面的代码中,查询返回 A 和 B 的值列表。(List),这意味着对于每个 A,将返回来自 B 的值列表,其中 parentAid 是 B 中的外键。

注意:更多信息请参考:https://developer.android.com/training/data-storage/room/relationships#one-to-many

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-29
    • 2021-12-02
    • 2019-05-02
    • 2013-11-23
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多