Я должен создать простое разбиение на страницы объектов, но когда я прочитал руководство, я узнал что query.setRange (5, 10); выберет 10 объектов, даже когда только 5 объектов необходимы.
Там должен так или иначе выбрать просто необходимые объекты?
Править: Я запустил щедрость, таким образом, fi, можно показать мне простой пример кода в Java, который работает, затем я признаю, что Вы отвечаете.
Возможно, вам стоит рассмотреть возможность использования курсоров, а не setRange, если вы пытаетесь сделать пагинацию.
На сайте App Engine есть статья по этой теме:
http://code.google.com/appengine/articles/paging.html
Примеры написаны на Python, но они простые достаточно, чтобы вы могли довольно легко перевести на Java.
Вот реализация 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
Почему возникает проблема, если из базы данных возвращено 10 объектов? Вам по-прежнему будут возвращены только 5 объектов, которые вам небезразличны (первые 5 отбрасываются).
Я не спрашиваю, потому что считаю, что метод setRange - это решение, которое невероятно хорошо масштабируется, но это простое и разумное решение, более чем адекватное в большом количестве случаев.
Планируете ли вы разбивать на страницы очень большие таблицы или включать дорогостоящие объединения? Если нет, у меня возникнет соблазн использовать setRange в качестве отправной точки для вашей нумерации страниц.