En JPA 2, à l'aide d'un CriteriaQuery, comment calculer le nombre de résultats
Je suis plutôt nouvelle pour JPA 2 et c'est CriteriaBuilder /CriteriaQuery API:
CriteriaQuery
dans le tutoriel Java EE 6
Je voudrais compter les résultats d'une CriteriaQuery sans réellement à les retrouver. Est-ce possible, je n'ai pas trouvé une telle méthode, le seul moyen serait de faire:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<MyEntity> cq = cb
.createQuery(MyEntityclass);
//initialize predicates here
return entityManager.createQuery(cq).getResultList().size();
Et qui ne peut pas être la bonne façon de le faire...
Est-il une solution?
- Il serait très utile si quelqu'un peut aider ou de les inclure dans les réponses ci-dessous. Comment atteindre suivantes compter de la requête en utilisant JPA critères de l'API? select count(distinct col1, col2, col3) from ma_table;
Vous devez vous connecter pour publier un commentaire.
Une requête de type
MyEntity
va revenirMyEntity
. Vous voulez une requête pour unLong
.Évidemment, vous voulez construire votre expression avec toutes les restrictions et les groupements etc vous avez sauté dans l'exemple.
qb.count
est fait sur laRoot<MyEntity>
de votre requête (Root<MyEntity>
myEntity = cq.à partir de(MyEntity.class)) et c'est souvent déjà dans votre normale sélectionnez le code et quand vous l'oubliez, vous vous retrouvez avec une jointure de soi.J'ai trié ce à l'aide de la cb.createQuery() (sans le résultat de paramètre de type):
Espère que cela aide 🙂
Que d'autres réponses sont correctes, mais trop simple, donc, pour être complet, je vais présenter ci-dessous un extrait de code pour effectuer
SELECT COUNT
sur un sophistiqué JPA Critères de la requête (avec plusieurs jointures, les extractions, les conditions).Il est légèrement modifié cette réponse.
Espère qu'il sauve quelqu'un moment.
Parce que à mon humble avis JPA Critères de l'API n'est pas intuitif, ni tout à fait lisible.
C'est un peu délicat, en fonction de la JPA 2 application que vous utilisez, celui-ci travaille pour EclipseLink 2.4.1, mais n'a pas pour Hibernate, voici un générique CriteriaQuery compter pour EclipseLink:
L'autre jour, j'ai migré à partir de EclipseLink pour Hiberner et dû changer ma fonction de comptage pour le suivant, donc n'hésitez pas à utiliser car c'est un problème difficile à résoudre, il pourrait ne pas fonctionner pour votre cas, il a été en usage depuis Hibernate 4.x, notez que je n'essayez pas de deviner qui est la racine, au lieu de cela je le passe à partir de la requête si le problème est résolu, trop ambigu cas du coin pour essayer de deviner:
Vous pouvez également utiliser des Projections: