对象化 - 给定 Parent 的所有 children
Objectify - all children of a given Parent
我正在使用 objectify 和 google 云数据存储。
我正在寻找一种方法来获取 parent 的所有 children(没有特定类型或种类)。
我知道祖先函数
我用过这个
ofy().load().ancestor(entity).list();
这给了所有 children 和 grandchildren(我不想要)。
在此示例中,A 是 1、2 和 3 的 parent。
1是m
的parent
A
/ | \
1 2 3
|
m
我想要 {1 ,2 ,3} 的数据而不是 {1 ,2 ,3, m }
您知道如何获得更准确的结果吗? (没有盛大children)
我认为唯一的方法是创建一个 index 并在父 属性 上使用 filter。 @parent 会将父键添加为子键的一部分,因此从本质上讲,您将获得所有后代,并且除了过滤类型之外没有其他简单的方法。
这个没有优雅的解决办法,我怀疑你在滥用@Parent
。想要在数据存储中创建 grand@Parent 关系应该是非常、非常。数据存储中的大多数层次关系最好用传统的外键关系表示。
但如果你下定决心,一个解决方案是使 1、2 和 3 都是同一类的所有多态对象。那么你可以这样查询:
ofy().load().type(BaseType.class).ancestor(parent)
查询类型的另一个优点是您现在可以应用过滤器(无情查询不能有过滤器):
ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value)
如果您希望排除的值很少见,另一种选择是无论如何都获取它们并过滤掉它们。
我正在使用 objectify 和 google 云数据存储。
我正在寻找一种方法来获取 parent 的所有 children(没有特定类型或种类)。
我知道祖先函数
我用过这个
ofy().load().ancestor(entity).list();
这给了所有 children 和 grandchildren(我不想要)。
在此示例中,A 是 1、2 和 3 的 parent。 1是m
的parentA / | \ 1 2 3 | m
我想要 {1 ,2 ,3} 的数据而不是 {1 ,2 ,3, m }
您知道如何获得更准确的结果吗? (没有盛大children)
我认为唯一的方法是创建一个 index 并在父 属性 上使用 filter。 @parent 会将父键添加为子键的一部分,因此从本质上讲,您将获得所有后代,并且除了过滤类型之外没有其他简单的方法。
这个没有优雅的解决办法,我怀疑你在滥用@Parent
。想要在数据存储中创建 grand@Parent 关系应该是非常、非常。数据存储中的大多数层次关系最好用传统的外键关系表示。
但如果你下定决心,一个解决方案是使 1、2 和 3 都是同一类的所有多态对象。那么你可以这样查询:
ofy().load().type(BaseType.class).ancestor(parent)
查询类型的另一个优点是您现在可以应用过滤器(无情查询不能有过滤器):
ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value)
如果您希望排除的值很少见,另一种选择是无论如何都获取它们并过滤掉它们。