Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Objectify-给定父对象的所有子对象_Java_Objectify_Google Cloud Datastore - Fatal编程技术网

Java Objectify-给定父对象的所有子对象

Java Objectify-给定父对象的所有子对象,java,objectify,google-cloud-datastore,Java,Objectify,Google Cloud Datastore,我正在使用objectify和google云数据存储 我正在寻找一种让所有孩子(没有特定类型或种类)都成为父母的方法 我知道祖先的功能 我用过这个 ofy().load().ancestor(entity).list(); 这给了所有的孩子和孙子(我不想要) 在本例中,A是1、2和3的父级。 1是m的父代 A / | \ 1 2 3 | m A. / | \ 1 2 3 | M 我想要{1,2,3}的数据,而不是{1,2,3,m} 你知道一种更准确的方法吗?(没有

我正在使用objectify和google云数据存储

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

我知道祖先的功能

我用过这个

ofy().load().ancestor(entity).list();
这给了所有的孩子和孙子(我不想要)

在本例中,A是1、2和3的父级。 1是m的父代

A / | \ 1 2 3 | m A. / | \ 1 2 3 | M 我想要{1,2,3}的数据,而不是{1,2,3,m}


你知道一种更准确的方法吗?(没有孙子女)

我认为唯一的方法是创建一个索引,并对父属性使用过滤器。@parent会将父键添加为子键的一部分,因此从本质上讲,您将获得所有的子键,并且除了类型之外,没有简单的方法进行筛选。

对此没有优雅的解决方案,我怀疑您滥用了
@parent
。这应该是非常,非常罕见的想要创造grand@Parent数据存储中的关系。数据存储中的大多数层次关系最好用传统外键关系表示

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

ofy().load().type(BaseType.class).ancestor(parent)
使用类型进行查询的另一个优点是,您现在可以应用过滤器(kindless查询不能使用过滤器):


如果希望排除的值很少,另一种选择是只提取它们并过滤掉。

ok。在这种情况下,我不知道父字段的名称。如何应用过滤器?我的意思是所有的孩子都有父母的财产,但他们没有相同的名字。用同样的例子。如果在实体1中,父对象称为“父对象”,但在实体2中,父对象称为“父对象”,那么您是对的,因此我没有简单的解决方案。对我来说,唯一的方法是按祖先查询,并通过反射检查属性是否等于父对象以删除子对象。您不能
@Index
@parent
字段
@Parent
字段不是真实属性,它们是键的一部分。
ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value)