Comment mettre en oeuvre la clause SQLLangage permettant de communiquer avec une base de données. WHERE avec Hibernate 4 ?
Le principe
Si vous savez faire une requête simple avec Hibernate 4, vous êtes prêt à mettre en oeuvre une clause WHERE. Pour cela, il faut utiliser la classe javax.persistence.Predicate : cette classe représente une condition ou une série de conditions.
Les fonctions permettant d’appeler les opérateurs sont fournies par la boîte à outils qu’est le CriteriaBuilder. Ces fonctions prennent en paramètre des Expression<?> et les valeurs de comparaison, et renvoient des objets Predicate.
En pratique
Exemple : la commande ayant le numéro « CMD0001 » :
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<
Commande> criteriaQuery = builder.createQuery(Commande.class);
Root<
Commande> root = criteriaQuery.from(Commande.class);
criteriaQuery.select(root);
Predicate predicate = builder.equal(root.get(Commande_.numero), "CMD0001");
criteriaQuery.where(predicate);
TypedQuery<
Commande> typedQuery = entityManager.createQuery(criteriaQuery);
List<
Commande> result = typedQuery.getResultList();
Si à l’inverse vous voulez les commandes qui n’ont pas ce numéro, donc si vous voulez utiliser l’opérateur != ou <>, appelez la fonction notEqual() à la place d’equal().
Plusieurs conditions
Si votre clause WHERE doit contenir plusieurs conditions, le CriteriaBuilder fournit les fonctions and() et or() qui mettent en oeuvre les mots-clés correspondant.
Exemple : :
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<
Commande> criteriaQuery = builder.createQuery(Commande.class);
Root<
Commande> root = criteriaQuery.from(Commande.class);
criteriaQuery.select(root);
Predicate predicate = builder.equal(root.get(Commande_magasin).get(Magasin_.id), 3);
predicate = builder.and(predicate, builder.equal(root.get(Commande_.client).get(Client_.id), 23));
criteriaQuery.where(predicate);
TypedQuery<
Commande> typedQuery = entityManager.createQuery(criteriaQuery);
List<
Commande> result = typedQuery.getResultList();
Remarque
Attention à l’ordre dans lequel vous appelez les fonctions and() et or() : si vous avez plusieurs conditions imbriquées qui nécessitent des parenthèses (par exemple : « … OR … (… AND …)), imbriquez les appels de méthodes de la même manière pour obtenir le résultat souhaité.
Les tests E2E, c’est quoi ? Définition, implémentation et retour d’expériences des librairies de tests E2E !
Gestion des Queues et Topics sous Jboss 7. @MessageDriven et configuration
Votre code fonctionne, il est beau, optimisé (n’est-ce pas), prêt à être déployé en production aux yeux de tous. Il ne reste plus qu’à l’héberger. Seulement… entre l'hébergement On-Premise et le Cloud, entre dédié et mutualisé, la décision peut sembler complexe. Dans cet article, nous allons examiner ces différentes options afin de vous guider vers le choix le plus adapté à vos besoins. Bonne lecture !