Critères d’Hibernate page de retour et nombre de lignes

En utilisant les critères Hibernate, j’essaie de réaliser la pagination, mais le problème est que pour chaque extraction de page, je dois effectuer deux appels de firebase database, l’un pour les résultats et l’autre pour le nombre total d’enregistrements. Existe-t-il un moyen efficace pour que, dans un seul appel à la firebase database, je puisse obtenir les données ou réduire les appels à la firebase database?

Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Ressortingctions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setMaxResults(10); criteria.setFirstResult((paginate.getStartIndex()-1)*10); criteria.setProjection(Projections.rowCount()); //here i need to fetch total row count and records 

Oui, vous avez besoin de la requête séparée pour obtenir le nombre total de résultats.

  Query aCountQuery = session.createQuery("select count(s.id) from Student s where s.enquiryStatus != :enquiryStatus"); aCountQuery.setParameter("enquiryStatus", ENQUIRY.JOINED); Long resultCount = (Long)aCountQuery.uniqueResult(); 

ou

  Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Ressortingctions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setProjection(Projections.rowCount()) Long resultCount = (Long)criteria.uniqueResult(); 

Mettre à jour

Maintenant, vous pouvez utiliser les mêmes critères pour les résultats avec pagination et nombre de résultats

  Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Ressortingctions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setMaxResults(10); criteria.setFirstResult((paginate.getStartIndex()-1)*10); List students = criteria.list(); criteria.setProjection(null); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); Long resultCount = (Long)criteria.uniqueResult(); 

Autant que je sache, il n’existe aucune méthode directe pour ce faire. Aussi simple que vous puissiez le faire, écrivez une petite hql query (mon choix), avec vos criteria principaux.

 Number count = (Number) session.createQuery( "select count(s.id) from Student s").uniqueResult();