0

如果是这样,怎么做?

我将该属性设置为一个类型:List,它在运行时只是一个我相信的列表。

但是,添加投影时,我收到不支持 List 的错误

query.addProjection(new PropertyProjection("ListofLongs", List.class);

java.lang.IllegalArgumentException: Unsupported type: interface java.util.List
    at com.google.appengine.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:96)
    at com.google.appengine.api.datastore.RawValue.asType(RawValue.java:58)

我还尝试将投影属性的类作为 null 传递,而不是尝试将 RawValue 转换为 List ......不行。(并且由于 RawValue.asType 触发了异常,因此由其他方法的堆栈跟踪支持)

针对多值/集合属性的投影查询是否存在某种未记录的限制?

4

2 回答 2

3

GAE Datastore 绝对支持对多值属性的投影查询

但正如文档所述:您不会将属性作为整个列表返回,而只会将与您的查询匹配的列表值作为单独的实体返回。

基本原理:投影查询是一个“假”查询,它只使用索引并重新创建从索引中的数据返回的实体。它从不触及实际的实体(这就是重点——要快)。由于多值属性(集合、数组)中的每个值都创建一个单独的索引条目,因此投影查询的结果是单独的(假)实体。

于 2013-09-18T15:55:18.357 回答
0

您必须使用列表包含的类。例如,如果你有一个字符串列表属性,你应该传递 String.class 而不是 List.class。

然后,如另一个答案中所述,您将为列表属性中的每个匹配值获得实体的单独副本。

https://cloud.google.com/appengine/docs/standard/java/datastore/projectionqueries#Java_Projections_and_multiple_valued_properties

于 2019-04-19T00:04:13.083 回答