2009-11-09 5 views
2

Je fais un répertoire liste en utilisant Hibernate et, pour éviter d'avoir des tonnes de données chaque requête, j'utilise:Mise en veille prolongée: résultats page et de connaître la taille du résultat

Criteria paging = sess.createCriteria(Principal.class); 
paging.setFirstResult((int) resultSetStart); 
paging.setMaxResults(resultSetSize); 
... 
List<Principal> principals = paging.list(); 

Maintenant, cela fonctionne très bien: Je suppose exactement resultSetSize résultats. Cependant, je veux faire quelque chose comme Google a, 'montrant la page X sur Y'.

Comment puis-je connaître le nombre total d'entrées? Ou le nombre total de pages?

Répondre

0

Il n'y a vraiment aucun moyen d'obtenir le nombre de tous les résultats sans invoquer une requête COUNT(). Donc, soit vous devez faire une approximation (comme Google fait), ou vous pouvez simplement compter le nombre d'entités au total avant d'exécuter votre requête en utilisant:

paging.setProjection(Projections.rowCount());

+0

donc je dois faire deux requêtes, l'une pour le nombre de lignes, l'autre pour les données réelles ??? – malaverdiere

+0

Si vous voulez vraiment avoir des résultats exacts, alors oui. Mais avant de commencer à vous soucier des performances, consultez la documentation de votre base de données sous-jacente, car elle pourrait être en mesure de le faire très efficacement. – candiru