2010-06-16 14 views
5

benim Servlet/EJB/JPA-hazırda projesinde pagination uygulamak istiyoruz, ama benLAST sayfasını JPA ile nasıl hesaplayabiliriz?

kullanmak ben

göstermelidir sayfa sayısını sorgudan nasıl yalnızca bir sayfa anlamaya ve bilemez

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

ve bu işe yarıyor, ancak toplam kaç sayfa olacağımı nasıl bilebilirim?

(hazırda benim JPA sağlayıcısı ama sadece JPA mümkünse kullanmayı tercih ediyorum)

GÜNCELLEME: COUNT() daha iyi/en kolay çözüm gibi görünmektedir; ama SELECT COUNT(*) FROM ...'un maliyeti executeQuery("SELECT * FROM ...).getListResult().size() ile karşılaştırıldığında ne olabilir?

+1

de bu soruya bakın yardımcı Umut: http://stackoverflow.com/questions/168.084/is-orada-a-daha verimli yollu bir verme sayfalama-in-hazırda daha-yürütme-se – serg

cevap

4

AFAIK, (1) sayımını veya (2) tam isabet listesini almanız ve sayfa içi sayfalama işlemi yapmanız gerekir. Sayfa sayısı, toplam sayımın/sayfa boyutunun toplanmasıdır.

saymak için çeşitli yollar vardır, bir ben,

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

veya başka oner projeksiyon

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

Not olsa bu bir hiç kullanılmamış kullanmaktır gibi COUNT(*) kullanmaktır sadece bir yere oku.

Bu cevap sayfalandırma hakkında birkaç diğer ayrıntıları belgeleyen etmişti

: