2010-06-16 12 views
5

Vorrei implementare l'impaginazione nel mio/EJB/progetto JPA-Hibernate Servlet, ma io non riesco a capire come una sola pagina dalla query e conoscere il numero di pagine devo visualizzareCome possiamo calcolare la pagina LAST con JPA?

Io uso

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

e va bene, ma come faccio a sapere quante pagine avrò in totale?

(Hibernate è il mio provider JPA, ma preferirei utilizzando solo JPA se possibile)

UPDATE: COUNT() sembra essere il/soluzione più semplice migliore; ma quale può essere il costo di SELECT COUNT(*) FROM ... in confronto a executeQuery("SELECT * FROM ...).getListResult().size()?

+1

vedere anche questa domanda: http://stackoverflow.com/questions/168084/v'è-a-più-efficiente vie-di-fare-impaginazione-in-hibernate-di-esecuzione-se – serg

risposta

4

AFAIK, è necessario (1) contare o (2) recuperare l'elenco completo e eseguire la paginazione in memoria. Il numero di pagine è il rastrellamento del conteggio totale/della dimensione della pagina.

Ci sono diversi modi per contare, uno è quello di utilizzare COUNT(*) come in

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

o nell'altro Oner è quello di utilizzare una proiezione

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

Nota che non ho mai usato questo uno, però, ho basta leggerlo da qualche parte

avevo documentato pochi altri dettagli circa la paginazione in questa risposta:

La speranza è aiutare