我有几个数据存储区实体存在于多对多关系中,其中父级具有对子级的引用列表。我们正在使用Objectify。
@Entity
@Cache
public class Parent {
@Index
String name;
private List<Ref<Child>> children;
...getters/setters etc...
}
@Entity
@Cache
public class Child {
@Index
String name;
...getters/setters etc...
}
我需要获得所有孩子的清单以及每个孩子的所有父母的清单。这是建立我的关系的正确方法吗?查询是什么样的?
我可以获得所有孩子的列表和所有父母的列表,然后遍历每个孩子以查看存在哪些关系,但我想知道是否有更好的方法。
答案 0 :(得分:0)
您可以在其中一个实体中列出关系。然后,您可以直接从实体获取父母或子女的列表,通过对此索引属性的查询获得另一种关系。
您必须牢记两个问题:
索引属性列表的属性可能很棘手 - 请阅读爆炸索引。如果这个实体有许多其他索引字段,那么这不是一个好的选择。
每次更新关系时,都必须重写此实体中的每个索引属性,如果关系经常更新和/或此实体中有其他索引属性,则可能非常昂贵。 / p>
如果您遇到这些问题,可以考虑创建一个新实体“Relationship”,其中包含一个子ID的索引属性。该实体可以是父实体的子实体。使用此方法,您可以通过在关系实体上运行祖先查询来获取所有子项的列表,并且您可以通过在关系实体上运行简单查询来获取所有父项的列表,并使用筛选器来匹配子ID(可以提取父ID来自此查询通过调用getParent().getId()
返回的实体。)