4

我正在尝试执行投影查询,以便从我的一万多个实体的数据存储中的每个实体中获取多个属性。我已阅读并遵循文档,但我的查询没有返回任何结果。我什至将我的投影简化为仅投影一个属性,即实体的 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;
4

1 回答 1

3

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

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

于 2013-04-02T19:12:52.177 回答