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é.
Dans cet article, nous allons voir comment contextualiser vos projets dans l’ETL Talend. La contextualisation consiste à, d’une part, « variabiliser » l’ensemble des paramètres qui sont utilisés dans les jobs (connexion aux bases de données, chemin vers l
Amazon Web Services (AWS) propose une large gamme de services et parmi eux, un bon nombre de servies d’hébergement intéressants. Aujourd’hui, nous allons vous parler de l’un d’entre eux : le service d’hébergement Elastic Bean
Comment gérer le lazy loading des blob en HIBERNATE