如何使用父实体密钥使用数据存储api获取嵌套子实体

时间:2017-04-07 17:34:04

标签: java google-app-engine google-cloud-datastore

我在这里使用数据存储API来创建,更新和更新检索实体。

我的用例是,必须获取父实体的子和子子实体。

我的实体结构如下:

 Company
     --> Employee
            --> Address (Multiple Address entities).

此处我有Company实体密钥,我需要获取Employee个详细信息以及为该员工配置的所有Address个实体。

示例:

Company --> Aaa
     Employee --> John 
                  Address --> California
                  Address --> Redwood
     Employee --> Robert
                  Address --> New York
                  Address --> Washington

我的查询如下:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

Query query = new Query("Employee").setAncestor(companyKey);
datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());

我要求的结果应该是John& Sons的员工实体。罗伯特以及各自的Address实体。

1 个答案:

答案 0 :(得分:2)

Appengine文档说:

public Query setAncestor(Key ancestor)

设置此查询的祖先。这会限制查询仅返回来自给定实体的结果实体。换句话说,所有结果都将祖先作为其父级,如果指定了null,则取消设置任何先前设置的祖先。将null作为参数传递不会查询没有祖先的实体(当前不支持此类查询)。或者父亲的父等。 “

所以你的代码应该可以正常工作。它将以Aaa为祖先归还所有实体,即;员工(父母)和地址(父母的父母)实体。

Documentation Link