Objectify SimpleQuery.endAt() - 它究竟从哪里开始?

时间:2014-10-04 20:51:51

标签: objectify

Objectify的SimpleQuery.endAt()的确切语义是什么?文档说它"在指定的Cursor"处结束查询结果。 (https://code.google.com/p/objectify-appengine/source/browse/src/main/java/com/googlecode/objectify/cmd/SimpleQuery.java?r=a7402d1a9308fbb7b9fd6cb687e43be091d1bcb0#73),可以用两种方式解释。

假设光标指向结果C并且我将查询限制设置为X. endAt()将返回[C-X,C]或[0,min(X,C)]范围内的结果?也就是说,它是从光标的X结果开始并始终在光标处结束,还是始终从头开始?

编辑: 文档让我觉得它会是前者,但我在实践中观察到的是后者的行为。这意味着要正确实现搜索结果的分页,必须跟踪所有游标,而不仅仅是最近的两个游标。这很好,但我认为文档应该更加明确。

1 个答案:

答案 0 :(得分:0)

Objectify endAt()只是将光标传递给低级API FetchOptions.endCursor(); limit()只是将值传递给FetchOptions.limit()。该交互由Google定义,似乎没有记录。我能找到的最相关的部分是:

https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/FetchOptions#endCursor(com.google.appengine.api.datastore.Cursor)

https://cloud.google.com/appengine/docs/java/datastore/queries#Java_Query_cursors

我会问一下appengine google group,或者可能会将另一个stackoverflow问题转发给GAE(删除Objectify和Java特有的性质)。幸运的是,有人知道 - 可能在GAE / Python社区,它比GAE / Java社区稍大。