【问题标题】:Why QueryResultIterator#getCursor() return null in GAE/J为什么 QueryResultIterator#getCursor() 在 GAE/J 中返回 null
【发布时间】:2012-09-20 06:04:15
【问题描述】:

getCursor() javadoc 说:

返回:一个 Cursor 或 null 如果此查询结果无法恢复

“恢复”这个词在上下文中是什么意思?

我的代码如下:

        com.googlecode.objectify.cmd.Query q = createQuery();
        QueryResultIterator<T> itr = q.iterator();
        while( itr.hasNext() )
        {
            list.add( itr.next() );
        } 
        ... 
       String newCursorValue = itr.getCursor().toWebSafeString();

它抛出 NPE 只是因为 itr.getCursor() 是空的。这种方法在很长一段时间内运行良好,但今天当我修改查询条件时失败(但它是有效的)。但是我不明白为什么查询条件会影响 getCursor() 方法。

有人请解释一下吗? 顺便说一句,我使用 GAE/J v1.7.1,Objectify 4a3。

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

    您应该阅读有关limitations of cursors 的信息。这基本上定义了何时可以“恢复”查询。

    【讨论】:

    • 谢谢彼得,这只是解决了我的问题——文档说:“因为 NOT_EQUAL 和 IN 运算符是通过多个查询实现的,所以使用它们的查询不支持游标,也不构建复合查询使用 CompositeFilterOperator.or 方法。”
    • 感谢您指出这一点,我被困在这一点上。然而,令人困惑的是,IN 子句在带有 LocalDatastoreService 测试服务的单元测试中运行良好。我可能会为此提交错误!
    • 这是一个更新的链接,因为内容已经移动。 cloud.google.com/appengine/docs/java/datastore/… 还有更多详细信息的链接:cloud.google.com/datastore/docs/concepts/…
    猜你喜欢
    • 2022-12-26
    • 2016-12-28
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2015-07-04
    • 2019-09-29
    相关资源
    最近更新 更多