La clause HAVING en Hibernate 4
Le 27/12/2013 Par Florent Tripierjbossjeejboss 7hibernatehibernate 4requêtehaving
Comment utiliser la clause SQL HAVING avec Hibernate 4 ?
Rappel théorique
En SQLLangage permettant de communiquer avec une base de données., lorsqu’une requête possède une condition sur une colonne sur laquelle porte une clause GROUP BY, cette condition n’est pas exprimée dans la clause WHERE mais dans la clause HAVING.
En pratique
Si vous savez faire une requête simple avec Hibernate 4, écrire une condition simple et utiliser la clause GROUP BY, la mise en place d’un HAVING ne vous posera pas de problème. Il faut utiliser la méthode having() de votre CriteriaQuery
Exemple l’utilisation du multiselect) :
CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<Tuple> criteriaQuery = builder.createQuery(Tuple.class); Root<Commande> root = criteriaQuery.from(Commande.class); criteriaQuery.multiselect(root.get(Commande_.date), root.get(Commande_.departement), builder.count(root)); List<Expression<?>> groupList = new ArrayList(); groupList.add(root.get(Commande_.date)); groupList.add(root.get(Commande_.departement)); criteriaQuery.groupBy(groupList); Predicate predicate = builder.notEqual(root.get(Commande_.departement), "75"); criteriaQuery.having(predicate); TypedQuery<Tuple> typedQuery = entityManager.createQuery(criteriaQuery); List<Tuple> result = typedQuery.getResultList();
Sommaire
Comment utiliser la clause SQL HAVING avec Hibernate 4 ?
Rappel théorique
En pratique