2012-04-25 1 views
2

Я использую рамки ORM некоторое время, но я довольно новичок в Hibernate.Hibernate pagination: ScrollableResult vs. setMaxResult() + setFirstResult()

Предположим, у вас есть запрос (это вопрос или критерий, не имеет значения), который извлекает отличный результирующий набор и что вы хотите его разбивать на страницы. Вы предпочли бы использовать методы setMaxResult() и setFirstResult() или ScrollableResult?

Каков наилучший подход к исполнению (время выполнения и потребление памяти)?

ответ

2

Если вы используете веб-приложение, которое обслуживает отдельные страницы результатов в отдельных циклах запроса-ответа, то вы не можете использовать ScrollableResult для любых преимуществ. Используйте setFirst/Max/Result. Однако это может быть реальный убийца производительности, в зависимости от точного запроса и общего размера результата. Особенно, если бедный db должен сортировать весь набор результатов каждый раз, чтобы он мог рассчитать, что такое 100-110-й записи.

1

У нас были такие же вопросы на днях, и они рассчитаны на setMaxResult(..) и setFirstResult(..). Проблемы две:

  • ScrollableResult может выполнить один запрос для каждого вызова next(), если ваш драйвер JDBC или базы данных не обрабатывает его должным образом. Так было с нами (MySQL)
  • это скорее спящий режим, а не стандарт JPA.
+1

ScrollableResult не делает такой вещи (на любой достойной базе данных, то есть), это на самом деле довольно впечатляюще. Он непосредственно сопоставляется с поддержкой прокрутки JDBC и отображает их на родные курсоры db. Может быть, ваш опыт связан с работой с db, который не поддерживает курсоры? Тогда это определенно будет чистой катастрофой. –

+0

hmm, возможно, драйвер mysql jdbc не обрабатывает его должным образом – Bozho

Смежные вопросы