Я хотел бы реализовать разбиение на страницы в своем проекте Servlet/EJB/JPA-Hibernate, но я не могу выяснить, как только одна страница от запроса и знает число страниц, которые я должен отобразить
Я использую
setFirstResult(int first) ;
setMaxResults(int max) ;
и это работает хорошо, но как я могу знать, сколько страниц я буду иметь всего?
(Будьте в спящем режиме, мой поставщик JPA, но я предпочел бы использовать только JPA если возможный),
ОБНОВЛЕНИЕ: КОЛИЧЕСТВО (), кажется, лучшее/самое легкое решение; но какова может быть стоимость SELECT COUNT(*) FROM ...
по сравнению с executeQuery("SELECT * FROM ...).getListResult().size()
?
AFAIK, вам нужно либо (1) считать, либо (2) получить полный список хитов и сделать пагинацию в памяти. Количество страниц - это округление общего количества / размера страницы.
Есть несколько способов подсчета, один из них - использовать COUNT(*)
, как в
Query query=em.createQuery("SELECT COUNT
(emp.empName) FROM Employee emp");
или другой - использовать проекцию
criteria.setProjection(Projections.rowCount());
int rowCount = (Integer) criteria.list().get(0);
Обратите внимание, что я никогда не использовал этот способ, просто где-то прочитал.
В этом ответе я описал еще несколько деталей о пагинации:
Надеюсь, это поможет