我需要创建简单的对象分页,但是当我阅读手册时,我发现了query.setRange(5,10);将获取10个对象,即使只需要5个对象。
无论如何都要获取所需的对象?
编辑:我开始赏金,所以你可以用Java向我展示简单的示例代码,然后我会接受你的回答。答案 0 :(得分:2)
这个怎么样:
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
答案 1 :(得分:1)
在App Engine网站上有一篇关于这个主题的文章:
http://code.google.com/appengine/articles/paging.html
示例在Python中,但它们非常简单,您可以很容易地将其转换为Java。
Here's a Java implementation,我没有阅读或测试过。
答案 2 :(得分:1)
如果从数据库返回10个对象,为什么会出现问题?您仍将仅返回您关心的5个对象(前5个被丢弃)。
我不是在问,因为我认为setRange方法是一个可以很好地扩展的解决方案,但它是一个简单而合理的解决方案,在很多情况下都足够了。
您是否计划分页极大的表或合并昂贵的联接?如果没有,我很想用setRange作为你的分页的起点。
答案 3 :(得分:0)
如果您尝试进行分页,您可能希望使用cursors而不是setRange。