Objectify - 给定父母的所有孩子

时间:2015-12-09 14:17:12

标签: java objectify google-cloud-datastore

我正在使用objectify和Google云数据存储区。

我正在寻找一种方法让所有孩子(没有特定类型或种类)的父母。

我知道祖先的功能。

我用过这个

ofy().load().ancestor(entity).list();

这给了所有的孩子和孙子(我不想要)。

在这个例子中,A是1,2和3的父亲。  1是m

的父亲
   A
 / | \
1  2  3
|     
m     

我希望 {1,2,3} 的数据不是{1,2,3,m}

您知道如何获得更准确的结果吗? (没有孙子)

2 个答案:

答案 0 :(得分:2)

没有优雅的解决方案,我怀疑你在滥用@Parent。想要在数据存储区中创建grand @ Parent关系应该非常非常。数据存储区中的大多数层次关系最好用传统的外键关系表示。

但是如果你确定了,一个解决方案是制作1,2和3个相同类型的所有多态对象。那么你可以像这样查询:

ofy().load().type(BaseType.class).ancestor(parent)

查询类型的另一个好处是,您现在可以应用过滤器(无用的查询无法使用过滤器):

ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value)

另一种选择,如果您希望排除的值很少,则只需获取它们并将其过滤掉。

答案 1 :(得分:0)

我认为唯一的方法是在父属性上创建索引并使用过滤器。 @parent将父键添加为子键的一部分,因此本质上您将获得所有下降,除了要过滤的类型之外没有其他简单的方法。