谷歌应用引擎的投影查询返回0个结果

4

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

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个回答

3

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

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


1
正确的表述是 - id 不是属性。id 是实体键的一部分。 - stickfigure
我有同样的问题,但ID没有包含在投影中。不清楚如何在ID字段设置为EQUAL的查询中限制数据。 - Johann
@AndroidDev 你解决了吗?我也遇到了同样的问题。 - Seba Arriagada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接