DisplayTag нумерация страниц по сравнению с Hibernate Pagination - PullRequest
4 голосов
/ 29 июня 2010

Отображение тега обеспечивает функцию разбиения на страницы для данного объекта. Hibernates предоставляет возможность получать только необходимую запись на странице. В моем проекте мы используем обе концепции.

Показать тег: Мне нужно получить всю запись на основе критериев фильтра и сохранить ее в сеансе. Затем этот displaytag позаботится обо всей разбивке на страницы и сортировке. Так что Httpsession хранит много данных.

Hibernate: Он выбирает только запрашиваемое количество объектов из базы данных. Нужно открывать сеанс для каждого запроса.

Каков наилучший способ сделать? Или, если мы можем достичь обеих вещей, как это сделать? Пожалуйста, помогите в этом.

Ответы [ 2 ]

4 голосов
/ 30 июня 2010

Как вы обрисовали в общих чертах, с помощью DisplayTag вам нужно получить все результаты и поместить их в сеанс. Таким образом, вы делаете только один (потенциально дорогой) запрос, но он не будет хорошо масштабироваться с точки зрения памяти (если вам нужно получить большое количество результатов или если вы увеличите число одновременно работающих пользователей).

С другой стороны, в Hibernate вы можете использовать setFirstResult и setMaxResult, чтобы извлекать только записи, фактически показанные на каждой странице. Это требует выполнения запроса для каждой страницы, но масштабируется до бесконечного числа результатов.

Лично я предпочитаю второй подход, который я считаю более эффективным с точки зрения памяти - тем более что большинство пользователей не просматривают все страницы (так зачем загружать все результаты) - и использую шаблон, описанный в Разбиение на страницы в Hibernate и EJB3 .

Если вы решите придерживаться первого подхода, я бы применил некоторый предел максимального числа результатов, чтобы избежать слишком дорогих запросов. Если запрос выходит за пределы, попросите пользователя выполнить более строгий поиск, то есть добавить критерии (кто в любом случае собирается просматривать несколько тысяч результатов?).

И если вам нужны все результаты, например, для целей отчетности, то, на мой взгляд, ни DisplayTag, ни сеанс statefull не являются подходящим инструментом.

3 голосов
/ 14 апреля 2011

На самом деле вам не нужно извлекать все результаты, вы можете использовать функцию Displaytag, которая называется external pagination , где вы сообщаете Displaytag, что обрабатываете нумерацию страниц вне Displaytag.

Подробнее см. Внешний пейджинг и сортировка в документации Displaytag.

Кроме того, этот вопрос о стековом потоке содержит больше информации и образец кода.

...