Google App Engine投影查询返回0结果

时间:2013-04-02 09:21:16

标签: java google-app-engine projection objectify

我正在尝试执行投影查询,以便从超过一万个实体的数据存储区中的每个实体中获取多个属性。我已阅读并遵循documentation,但我的查询未返回任何结果。我甚至将我的投影简化为仅投影单个属性,实体的ID字段,但仍然得到0结果。这是我的简化代码:

Query q = new Query("MyEntity");
q.addProjection(new PropertyProjection("entityId", Long.class));
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
PreparedQuery pq = datastore.prepare(q);
int count = pq.countEntities(FetchOptions.Builder.withLimit(1000));
log.info("query contains " + count + " items.");

当我运行此代码时,count等于0.如果我只删除第二行以使查询没有投影,count等于1000。

我在我的应用中使用Objectify,但我使用GAE低级API进行投影查询,因为我使用的是Objectify v3,它不支持投影查询。改变我的代码以支持Objectify v4会有很多工作。

我投射的entityId字段在我的Objectify实体对象中看起来像这样:

@Id Long entityId;

1 个答案:

答案 0 :(得分:3)

所以事实证明,我只展示ID属性的简化案例证明是问题所在。当我在任何其他属性字段上测试相同的代码时,投影查询可以正常工作。

创建投影查询时,不应投影ID属性。它仍包含在生成的实体中,但在预测中包含它会导致查询没有结果。 ID属性的存储方式与实体中其他属性字段的存储方式不同。