Как реализовать пейджинг в Hibernate? Объекты Query
имеют методы, называемые setMaxResults
и setFirstResult
, которые, безусловно, полезны. Но где я могу получить общее количество результатов, чтобы я мог показывать ссылку на последнюю страницу результатов и печатать такие вещи, как результаты от 200 до 250 из xxx?Выполнение подкачки результатов в спящем режиме (получение общего количества строк)
ответ
Вы можете использовать Query.setMaxResults (int results) и Query.setFirstResult (int offset).
Редактирование тоже. Невозможно узнать, сколько результатов вы получите. Итак, сначала вы должны запросить «select count (*) ...». Немного уродливый, ИМХО.
вы можете выполнить два запроса - запрос типа count (*), который должен быть дешевым, если вы не присоединяете слишком много таблиц вместе, и второй запрос с установленными ограничениями. Затем вы знаете, сколько предметов существует, но только захватите просматриваемые.
Я лично считаю, что вы должны обрабатывать пейджинг в интерфейсе. Я знаю, что это не так эффективно, но, по крайней мере, это будет менее подвержено ошибкам.
Если вы используете функцию count (*), что произойдет, если записи будут удалены из таблицы между запросами на определенную страницу? Многие вещи могут пойти не так.
I не думайте, что это важно. Если записи удаляются ** и ** вы можете просматривать последние страницы, тогда вы получите сообщение об ошибке и ссылку на последние существующие записи. Или что-то подобное. – flybywire
есть проблемы с пейджингом на лицевой стороне, если количество данных является чрезмерно большим - скажем, 1 миллион записей или что-то еще. – Chii
Вы должны сделать отдельный запрос, чтобы получить максимальные результаты ... и в случае, когда между моментами A в первый раз клиент выдает запрос подкачки к времени B, когда выдается другой запрос, если новые записи добавлены или некоторые записи теперь соответствуют критериям, тогда вам нужно снова запросить max, чтобы отразить их. Я обычно делаю это в HQL как этот
Integer count = (Integer) session.createQuery("select count(*) from ....").uniqueResult();
для Criteria
запросов я обычно толкать мои данные в DTO как этот
ScrollableResults scrollable = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
if(scrollable.last()){//returns true if there is a resultset
genericDTO.setTotalCount(scrollable.getRowNumber() + 1);
criteria.setFirstResult(command.getStart())
.setMaxResults(command.getLimit());
genericDTO.setLineItems(Collections.unmodifiableList(criteria.list()));
}
scrollable.close();
return genericDTO;
Вы можете просто setMaxResults до максимального числа строк, которые вы хотите получить. Нет никакого вреда при установке этого значения больше, чем количество доступных доступных строк. Проблема в других решениях заключается в том, что они предполагают, что упорядочение записей остается одинаковым с каждым повторением запроса, и между командами не происходит никаких изменений.
Чтобы избежать этого, если вы действительно хотите прокручивать результаты, лучше использовать прокручиваемые результаты. Не выбрасывайте этот объект между пейджинговыми сообщениями, но используйте его для сохранения записей в том же порядке. Чтобы узнать количество записей из ScrollableResults, вы можете просто перейти к последней() позиции, а затем получить номер строки. Не забудьте добавить 1 к этому значению, так как номера строк начинаются с нуля 0.
- 1. Ошибка получение количества уникальных результатов в спящем режиме
- 2. Tridion pagination - получение общего количества результатов
- 3. Получение sessionFactory в спящем режиме
- 4. Настройка режима общего кэша в спящем режиме
- 5. Получение количества строк с помощью набора результатов
- 6. Получение общего количества в колонке
- 7. Выполнение изменения общего количества строк таблицы HTML в Java Script
- 8. Выполнение сложных запросов в спящем режиме
- 9. Получение общего количества строк в текстовом виджете Tkinter?
- 10. Facebook Graph API: получение общего количества сообщений
- 11. Получение общего количества ответов JSON
- 12. Получение общего количества элементов перечисления
- 13. Получение общего количества простых чисел
- 14. Получение общего количества зарегистрированных пользователей
- 15. Получение общего количества различных значений
- 16. получение количества отфильтрованных результатов в списке (smartgwt)
- 17. Выполнение общего количества последовательных одинаковых значений
- 18. Получение общего количества записей в PagedList
- 19. Выбор количества строк из результатов
- 20. Отображение общего количества строк в таблице Slickgrid
- 21. Запрос с использованием общего числа в спящем режиме
- 22. Получение количества строк в NSOutlineView
- 23. Подходящие строки фильтрации - получение количества результатов
- 24. Получение rowcount общего выражения таблицы CTE в параметр для подкачки
- 25. получение всех значений даты в диапазоне дат в спящем режиме
- 26. Примеры запросов в спящем режиме
- 27. Получение общего количества записей, соответствующих условиям php
- 28. Диалект в спящем режиме
- 29. присоединяется в спящем режиме
- 30. SessionFactory в спящем режиме
Я согласен с двумя другими ответами. Кроме того, я прошу о практике внедрения в этой должности: http://stackoverflow.com/questions/1600440/java-coding-best-practices-for-reusing-part-of-a-query-to-count – KLE