Dans cet article


Offres d'emploi

Tags

La clause ORDER BY en Hibernate 4

La clause ORDER BY en Hibernate 4

Comment utiliser la clause SQL 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();

L'équipe AXOPEN

Voir aussi les articles suivants

Le multiselect avec Hibernate 4

Le multiselect avec Hibernate 4

Le 05/11/2013 par Florent Tripier

Nous avons vu dans l’article « Les requêtes avec Hibernate 4 » comment réaliser une requête ramenant soit un champ soit tous les champs (SELECT *). Voyons à présent comment ramener plusieurs champs mais pas tous. Le code côté Hibernate Pour ce faire, nous avons recours à la fonction multiselect() de la classe CriteriaQuery. Cette fonction prend en paramètres soit une List de champs, soit n paramètres représentant des champs ou des fonctions.
Lire l'article

Les requêtes avec Hibernate 4

Les requêtes avec Hibernate 4

Le 02/10/2013 par Florent Tripier

Hibernate 4 propose une syntaxe structurée qui permet d’exploiter la plupart des fonctionnalités du SQL. Cette syntaxe s’articule autour de quelques classes clés. Les classes clés pour construire une requête EntityManager L’EntityManager vous donne accès à votre PersistenceUnit, c’est-à-dire à votre base de données. C’est donc à partir de lui que seront construits tous les objets suivants. La configuration de la PersistenceUnit fera l’objet d’un autre article. CriteriaBuilder Le CriteriaBuilder est généré par l’EntityManager.
Lire l'article

La clause GROUP BY en Hibernate 4

La clause GROUP BY en Hibernate 4

Le 27/11/2013 par Florent Tripier

Comment utiliser la clause SQL GROUP BY avec Hibernate 4 ? Rappel théorique En SQL, lorsqu’une requête possède la clause GROUP BY, les champs mentionnés dans la clause SELECT ne peuvent être que : une colonne sur laquelle porte le GROUP BY ; une fonction d’agrégat (qui, elle, peut porter sur n’importe quelle colonne). En clair, je ne peux pas mentionner dans mon SELECT une colonne sur laquelle je ne groupe pas.
Lire l'article