La clause ORDER BY en Hibernate 4

Le 16/12/2013 Par Florent Tripierjbossjboss 7hibernatehibernate 4order byrequête

Comment utiliser la clause SQLLangage permettant de communiquer avec une base de données. ORDER BY avec Hibernate 4 ?

Le principe

Si vous savez faire une requête simple avec Hibernate 4, la mise en place d’ORDER BY est très simple. Elle passe par deux méthodes :

  • la méthode orderBy() de votre CriteriaQuery, à laquelle vous passez en paramètre une méthode de tri ;
  • la méthode asc() ou la méthode desc() de votre CriteriaBuilder, à laquelle vous passez le chemin vers le champ sur lequel vous ordonnez.

En pratique

Exemple : la liste des commandes triées par prix décroissant :

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<
Commande> criteriaQuery = builder.createQuery(Commande.class);
Root<
Commande> root = criteriaQuery.from(Commande.class);
criteriaQuery.select(root);
criteriaQuery.orderBy(builder.desc(root.get(Commande_.montantTTC)));
TypedQuery<
Commande> typedQuery = entityManager.createQuery(criteriaQuery);
List<
Commande> result = typedQuery.getResultList();

Si à l’inverse vous voulez trier par ordre croissant, il suffit de remplacer la méthode desc() par la méthode asc().

Tri sur plusieurs champs

Si votre clause ORDER BY porte sur plusieurs champs, la fonction orderBy() possède un deuxième prototype qui prend en paramètre une collection de javax.persistence.criteria.Order.

Exemple :  commandes triées par jour croissant puis par prix décroissant :

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<
Commande> criteriaQuery = builder.createQuery(Commande.class);
Root<
Commande> root = criteriaQuery.from(Commande.class);
criteriaQuery.select(root);
List<
Order> orders = new ArrayList<
Order>();
orders.add(builder.asc(root.get(Commande_.date)));
orders.add(builder.desc(root.get(Commande_.montantTTC)));
criteriaQuery.orderBy(orders);
TypedQuery<
Commande> typedQuery = entityManager.createQuery(criteriaQuery);
List<
Commande> result = typedQuery.getResultList();

Sommaire

  • fleche vers la droite Le principe
  • fleche vers la droite En pratique
  • fleche vers la droite Tri sur plusieurs champs

À voir aussi

Tous les articles