【发布时间】:2010-06-10 18:50:56
【问题描述】:
我需要创建简单的对象分页,但是当我阅读手册时,我发现 query.setRange(5, 10);将获取 10 个对象,即使只需要 5 个对象。
有没有办法获取刚需要的对象?
编辑:我开始赏金了,所以你可以向我展示 Java 中有效的简单示例代码,然后我会接受你的回答。
【问题讨论】:
我需要创建简单的对象分页,但是当我阅读手册时,我发现 query.setRange(5, 10);将获取 10 个对象,即使只需要 5 个对象。
有没有办法获取刚需要的对象?
编辑:我开始赏金了,所以你可以向我展示 Java 中有效的简单示例代码,然后我会接受你的回答。
【问题讨论】:
这个怎么样:
List<Employee> results = (List<Employee>) query.execute();
// Use the first 20 results...
Cursor cursor = JPACursorHelper.getCursor(results);
String cursorString = cursor.toWebSafeString();
// Store the cursorString...
// ...
// Query query = the same query that produced the cursor
// String cursorString = the string from storage
Cursor cursor = Cursor.fromWebSafeString(cursorString);
query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
query.setRange(0, 20);
List<Employee> results = (List<Employee>) query.execute();
// Use the next 20 results...
发件人:
How to use datastore cursors with jpa on GAE
还有:
或者没有 JPA 参见:
http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Cursor.html
【讨论】:
App Engine 网站上有一篇关于这个主题的文章:
http://code.google.com/appengine/articles/paging.html
这些示例是用 Python 编写的,但它们足够简单,您可以很容易地将其转换为 Java。
Here's a Java implementation,我没有阅读或测试过。
【讨论】:
如果从数据库返回 10 个对象,为什么会出现问题?您仍然只会返回您关心的 5 个对象(前 5 个被丢弃)。
我不是在问,因为我认为 setRange 方法是一个扩展性非常好的解决方案,但它是一个简单合理的解决方案,在很多情况下都绰绰有余。
您是否计划对超大表进行分页或合并昂贵的连接?如果没有,我很想使用 setRange 作为分页的起点。
【讨论】:
如果您尝试进行分页,您可能希望考虑使用 cursors 而不是 setRange。
【讨论】: