若然,怎么样?
我将属性设置为一个类型:List,它在运行时只是一个我相信的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触发异常,由另一个方法的stacktrace支持)
针对多值/集合属性的投影查询是否存在某种未记录的限制?
答案 0 :(得分:3)
GAE数据存储肯定支持projection queries on multi-valued properties。
但正如文档所述:您不会将属性作为整个列表返回,而只会将与您的查询匹配的列表值作为单独的实体返回。
基本原理:投影查询是一种“假”查询,仅使用索引并重新创建从索引中的数据返回的实体。它永远不会触及实际的实体(这是重点 - 要快)。由于多值属性(集合,数组)中的每个值都创建一个单独的索引条目,因此投影查询的结果是单独的(伪)实体。
答案 1 :(得分:0)
您必须使用列表包含的类。例如,如果您具有字符串列表属性,则应传递String.class而不是List.class。
然后,如另一个答案中所述,您将为list属性中的每个匹配值获得实体的单独副本。