2010-06-16 13 views
5

chciałbym wdrożyć paginacji w moim servlet/EJB/projektu JPA-hibernacji, ale nie mogę dowiedzieć się, jak tylko jedną stronę z zapytania i znać liczbę stron muszę wyświetlaćJak możemy obliczyć stronę OSTATNIA z JPA?

używam

setFirstResult(int first) ; 
setMaxResults(int max) ; 

i to działa dobrze, ale skąd mogę wiedzieć, ile stron będę mieć w sumie?

(Hibernate jest mój dostawca JPA, ale wolałbym używając tylko JPA jeśli to możliwe)

UPDATE: COUNT() wydaje się być lepiej/Najprostszym rozwiązaniem; ale jaki może być koszt SELECT COUNT(*) FROM ... w porównaniu z executeQuery("SELECT * FROM ...).getListResult().size()?

+1

patrz także pytanie: http://stackoverflow.com/questions/168084/jest-tam-bardziej-wydajnym-sposobem-tworzenia-paginacji-w-hibernacji-niż-wykonaniem-se – serg

Odpowiedz

4

AFAIK, musisz albo (1) policzyć, albo (2) odzyskać pełną listę trafień i zrobić paginację w pamięci. Liczba stron to zaokrąglenie całkowitej liczby/rozmiaru strony.

Istnieje kilka sposobów, aby policzyć, jedna jest użycie COUNT(*) jak w

Query query=em.createQuery("SELECT COUNT 
(emp.empName) FROM Employee emp"); 

lub inny oner jest użycie projekcji

criteria.setProjection(Projections.rowCount()); 
int rowCount = (Integer) criteria.list().get(0); 

Należy pamiętać, że nigdy nie używany ten jeden chociaż, ja po prostu ją gdzieś przeczytam.

miałem udokumentowane kilka innych szczegółów dotyczących paginacji w tej odpowiedzi:

nadzieję, że pomoże