【问题标题】:Android Room: Relationships with more childrenAndroid Room:与更多孩子的关系
【发布时间】:2021-05-18 15:56:21
【问题描述】:

我正在使用 Android Room,我必须使用与多个孩子的关系。我必须使用相同的架构 (How to create a table with a two or more foreign keys using Android Room?) 执行此问题中解释的相同操作,但使用 @Relationship 而不是 @ForeignKey。

我需要这个,因为我必须能够从父亲那里接触到孩子,而无需任何询问。

我查看了文档,但他们只解释了一个孩子 (https://developer.android.com/training/data-storage/room/relationships#nested-relationships) 的情况。

有人可以帮我吗?

感谢您的耐心和帮助!

【问题讨论】:

    标签: android android-room relationship


    【解决方案1】:

    首先没有 @Relationship 而不是 @ForeignKey

    @ForeignKey 定义了一个约束(规则),它表示子列的值必须是父列的引用列中的值,如果不是,则发生冲突。

    @Relationship 定义了一种关系,Room 然后通过添加子查询来尊重父级,这些子查询从子级获取所有相关实体。

    您可以使用两者的任意组合(无,其中之一或两者中的 1)。尽管@Relationship 可能最好使用@ForeignKey 来支持。

    假设您希望一个实体/表有多个子级,那么您只需拥有一个 POJO,其父级为 @Embedded 和多个 @Relationship

    @Dao@Query然后只需要提取父母,获取孩子的工作由Room生成的代码完成。您提取 POJO 对象,子项将成为 POJO 中的对象。

    • 请注意,您仅限于 ALL 子节点,而不是子集,因此 WHERE 子句对获取的子节点没有影响(因此@Relationship 概述中的大写 ALL)

    但是,如果您指的是嵌套子级。即父母的孩子有自己的孩子。然后你采取分层方法。启动没有父级(最小的子级)的子级,然后为父级(@Embedded)和子级(ren)(@Relationship)创建一个 POJO。对于该父级的父级,您使用@Relationship 为下级父级的父级创建一个 POJO,注意该实体不是子级的 POJO,而是实体,但相关对象属于 POJO 的类型。

    您可能希望参考此示例 Data classe to Room entities ,这涵盖了上述两种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多