【问题标题】:Google App Engine projection query returns 0 resultsGoogle App Engine 投影查询返回 0 个结果
【发布时间】:2013-03-23 12:43:57
【问题描述】:

我正在尝试执行投影查询,以便从我的一万多个实体的数据存储中的每个实体中获取多个属性。我已阅读并关注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;

【问题讨论】:

    标签: java google-app-engine projection objectify


    【解决方案1】:

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

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

    【讨论】:

    • 正确 - id 不是属性。 ID 是实体键的一部分。
    • 我有同样的问题,但投影中不包含 ID。目前尚不清楚如何限制 ID 字段设置为 EQUAL 的此类查询中的数据。
    • @AndroidDev 你解决了吗?我也面临同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多