Comment mettre en oeuvre la clause SQL WHERE avec Hibernate 4 ?
Comment mettre en oeuvre la clause SQL 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é.
La sensibilisation à la cybersécurité est devenue un passage obligé dans la plupart des entreprises. On connait tous les éléments classiques : une présentation annuelle, quelques slides sur les bonnes pratiques, et peut-être un quiz à la fin. Et pourtant, beaucoup de cyberattaques continuent de passer. Est-ce que vos collaborateurs ne sont pas assez vigilants ? Difficile à dire, mais on peut être sûr d'une chose : si votre formation cybersécurité en 2026 ne tient pas compte de ce que la data révèle sur le comportement humain face aux cyberattaques, elle n'est pas assez complète !
Zoom sur l'outil JTest
La TMA, c'est tout simplement le fait de confier la maintenance de son application à un prestataire informatique externe. Concrètement, une fois votre application en production, il faut continuer à la faire vivre : corriger les bugs, ajouter des fonctionnalités, faire évoluer les technologies, améliorer les performances… Bref, s'assurer qu'elle reste fiable et utile pour les équipes. Il y a quelques temps, on avait fait un épisode de podcast sur la TMA qu'on vous invite à écouter si c'est un sujet qui vous intéresse !