Java 如何使用数据存储api对子实体进行排序
在这里,我使用数据存储API创建、更新和检索实体 我的用例是,必须获得父实体的子实体和孙子实体 我的实体结构如下:Java 如何使用数据存储api对子实体进行排序,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,在这里,我使用数据存储API创建、更新和检索实体 我的用例是,必须获得父实体的子实体和孙子实体 我的实体结构如下: Company --> Employee --> Address (Multiple Address entities). DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Query query = new Query().se
Company
--> Employee
--> Address (Multiple Address entities).
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query().setAncestor(companyKey);
datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
java.lang.IllegalArgumentException: kind is required for all orders except __key__ ascending
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:50)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:121)
这里我有公司
实体密钥,我需要获取员工
详细信息以及为员工配置的所有地址
实体
例如:
Company --> Aaa
Employee --> John
Address --> California
Address --> Redwood
Employee --> Robert
Address --> New York
Address --> Washington
我的要求是:
地址
实体 Company
--> Employee
--> Address (Multiple Address entities).
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query().setAncestor(companyKey);
datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
java.lang.IllegalArgumentException: kind is required for all orders except __key__ ascending
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:50)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:121)
上述查询返回#1中指定的结果
但无法使用此查询按名称对员工
实体进行排序。
当我试图添加sort子句query.addSort(“name”,SortDirection.ASCENDING)
时,它抛出一个错误,如下所示:
Company
--> Employee
--> Address (Multiple Address entities).
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query query = new Query().setAncestor(companyKey);
datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
java.lang.IllegalArgumentException: kind is required for all orders except __key__ ascending
at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:50)
at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:121)
在查询中使用祖先路径时如何对子实体进行排序?您的查询被视为Kindless查询,因为您没有查询特定种类(例如地址或员工)。您只是说,获取所有具有指定祖先的实体。Kindless查询只能按键进行排序(
\uuuuuuuuuuuuuuuuuuuuuuuuuu
)。不支持其他属性
缔约国指出——
Kindless查询
没有种类和祖先的查询检索
来自云数据存储的应用程序。这种没有Kindles的查询无法实现
包括属性值的过滤器或排序顺序。但是他们可以,,
过滤实体键并使用祖先过滤器。密钥筛选器可以是
通过指定键作为属性名使用:
您可能希望研究修改模型,将地址作为嵌入列表存储到Empoyee实体中,看看这样是否更有效