gpt4 book ai didi

java - 如何使用数据存储 api 对子实体进行排序

转载 作者:行者123 更新时间:2023-11-30 06:44:01 25 4
gpt4 key购买 nike

此处,我使用 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

我需要的结果是:

  1. John 和 Robert 的员工实体以及各自的Address 实体。

  2. 员工实体应按姓名排序。

我的查询如下:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

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

以上查询返回#1 中指定的结果。

但无法使用此查询按名称对 Employee 实体进行排序。当我尝试添加排序子句 query.addSort("name", SortDirection.ASCENDING) 时,它抛出如下错误:

 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 查询只能按 Key (__key__) 排序。不支持其他属性。

documentation指出 -

Kindless queries

A query with no kind and no ancestor retrieves all of the entities of an application from Cloud Datastore. Such kindless queries cannot include filters or sort orders on property values. They can, however, filter on entity keys and use ancestor filters. Key filters can be used by specifying key as the property name:

您可能需要考虑修改模型以将地址作为嵌入列表存储到员工实体中,并查看是否效果更好。

关于java - 如何使用数据存储 api 对子实体进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com