Разбивка на страницы в Google App Engine с Java - PullRequest
7 голосов
/ 10 июня 2010

Мне нужно создать простую нумерацию объектов, но когда я прочитал руководство, я обнаружил, что query.setRange (5, 10); извлечет 10 объектов, даже когда нужно всего 5 объектов.

Есть ли в любом случае, чтобы получить только необходимые объекты?

РЕДАКТИРОВАТЬ: Я запустил Баунти, так что если вы покажете мне простой пример кода на Java, который работает, то я приму ваш ответ.

Ответы [ 4 ]

3 голосов
/ 18 июня 2010

Как насчет этого:

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...

От:

Как использовать курсоры хранилища данных с jpa на GAE

Также:

http://groups.google.com/group/google-appengine-java/browse_thread/thread/5223215ff24c3b3e/d22297d1d76a9c8b

Или без JPA см .:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Cursor.html

1 голос
/ 17 июня 2010

На сайте App Engine есть статья на эту тему:

http://code.google.com/appengine/articles/paging.html

Примеры приведены на Python, но они достаточно просты, что вы, вероятно, можете перевести на Javaдовольно легко.

Вот реализация Java , которую я не читал и не проверял.

1 голос
/ 18 июня 2010

Почему возникает проблема, если из базы данных возвращается 10 объектов? Вам по-прежнему будут возвращены только те 5 объектов, которые вас волнуют (первые 5 отбрасываются).

Я не спрашиваю, потому что я думаю, что метод setRange - это решение, которое невероятно хорошо масштабируется, но это простое и разумное решение, которое более чем адекватно во многих случаях.

Планируете ли вы разбивать на страницы очень большие таблицы или включать дорогие объединения? Если нет, то я бы хотел использовать setRange в качестве отправной точки для разбивки на страницы.

0 голосов
/ 11 июня 2010

Возможно, вы захотите использовать курсоры вместо setRange, если вы пытаетесь выполнить нумерацию страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...