Hibernate Hql найти размер результата для paginator - PullRequest
1 голос
/ 15 апреля 2010

Мне нужно добавить paginator для моего приложения Hibernate. Я применил его к некоторым операциям с базой данных, которые я выполняю с использованием Criteria, установив Projection.count (). Это работает нормально. Но когда я использую hql для запроса, я не могу найти эффективный метод для подсчета результатов. Если я сделаю query.list().size(), это займет много времени, и я думаю, что hibernate загрузит все объекты в памяти.

Может ли кто-нибудь предложить эффективный метод для получения результата при использовании hql?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

Вам нужно будет использовать другой запрос и Query#iterate(). Смотрите раздел 14.16. Советы и хитрости :

Вы можете посчитать количество результатов запроса, не возвращая их:

( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
1 голос
/ 15 апреля 2010

Я делал подобные вещи в прошлом. Если вы хотите получить общее количество записей для paginator, то я бы предложил вам сначала выполнить отдельный запрос. Этот запрос должен просто подсчитать и вернуть сумму.

Как вы подозреваете, чтобы посчитать ваши записи по вашему основному запросу, hibernate должен загрузить все записи, хотя лучше всего не загружать все данные для каждой записи. Но все же это занимает время.

Если вам это сойдет с рук, потому что даже запрос подсчета может занять время, если ваши предложения where неэффективны, просто проверьте, что вы вернули полную страницу записей, и установите какой-нибудь индикатор, чтобы показать может быть больше результатов на следующей странице. Это самый быстрый метод, потому что вы выполняете запросы только на каждую страницу так, как вам нужно.

...