FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 5, nombre de questions : 63, dernière mise à jour : 17 mars 2014 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- Qu'est ce que Criteria ?
- Comment effectuer une requête avec Criteria ?
- Comment restreindre les résultats de la requête ?
- Comment grouper les restrictions de manière logique ?
- Comment effectuer une recherche à partir d'un exemple ?
- Comment trier les résultats d'une requête ?
- Comment savoir le nombre d'enregistrements retournés par une requête Criteria ?
- Comment limiter le nombre de résultats retournés par une requête Criteria ?
- Comment récupérer le résultat d'un Criteria dans un Set ?
Criteria est une API de recherche orientée objet. Elle permet de faire des recherches dans la base de données de manière très simple. On peut ajouter des tris, des filtres, ...
HQL a beau être très puissant, beaucoup de développeurs préfèrent avoir une approche plus orientée objet, ils trouvent donc leur bonheur dans Criteria.
Tout d'abord il vous faut une session d'ouverte pour créer la Criteria. Ensuite, Criteria étant une recherche sur une classe donnée, il vous faut connaître le nom de cette classe et finalement, vous pouvez créer la requête :
Code java : | Sélectionner tout |
Criteria criteria = session.createCriteria(Od.class);
Ensuite, pour récupérer les résultats de la recherche, vous pouvez employer la méthode list() qui va vous renvoyer les résultats sous forme d'une liste (List).
Code java : | Sélectionner tout |
List results = criteria.list();
Vous avez maintenant tous vos résultats sous forme d'objet dans votre liste.
Avec Criteria, vous pouvez ajouter des restrictions qui vous permettront de limiter les résultats en fonction de différents critères.
Pour cela, nous allons ajouter des Criterions, que va nous fournir la classe restriction. Par exemple pour un like :
Code java : | Sélectionner tout |
1 2 3 | Criteria criteria = sess.createCriteria(Od.class) .add(Restrictions.like("description", "Attention%"))); List results = criteria.list(); |
Vous pouvez employer encore d'autres restrictions, telles que between ou lt (less than).
Vous pouvez aussi regrouper différents critères de manière logique avec les opérateurs ou et et.
Voici un exemple avec un opérateur ou :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 | Criteria criteria = session.createCriteria(Od.class) .add(Restrictions.between("weigth", 100,200) ) .add(Restrictions.or( Restrictions.isNotNull("etiquette"), Restrictions.isNull("description") ) ) List results = criteria.list(); |
Une autre possibilité qui nous est donnée par Criteria est de pouvoir effectuer une recherche à partir d'un exemple.
Exemple, vous avez une classe Film avec un réalisateur et une année de sortie et vous voulez trouver tous les autres films de ce même réalisateur :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | Film film = new Film(); film.setRealisateur("Frères Wachowsky"); film.setAnnee(2005); Example example = Example.create(film) .excludeProperty("annee") //On ne compare pas avec l'année .ignoreCase(); //On ne tient pas compte de la casse Criteria criteria = session.createCriteria(Film.class) .add(example); List results = criteria.list(); |
Vous pouvez trier les résultats d'une requête Criteria par propriété dans l'ordre croissant ou décroissant.
Pour cela, nous allons employer la méthode addOrder sur le Criteria et la classe Order :
Code java : | Sélectionner tout |
1 2 3 4 5 | Criteria criteria = session.createCriteria(Od.class) .add(Restrictions.between("weigth", 200, 500)) .addOrder(Order.asc("weigth")) .addOrder(Order.desc("nom")); List results = criteria.list(); |
Vous pouvez ajouter une Projection à votre Criteria :
Code java : | Sélectionner tout |
criteria.setProjection(Projections.rowCount());
Et dire ensuite que vous voulez récupérer un seul résultat :
Code java : | Sélectionner tout |
Integer result = (Integer) criteria.uniqueResult();
Donc pour une requête complète, vous pouvez faire :
Code java : | Sélectionner tout |
1 2 3 4 | Criteria criteria = session.createCriteria(OdPersonne.class); criteria.setProjection(Projections.rowCount()); Integer result = (Integer) criteria.uniqueResult(); System.out.println("Nombre d'enregistrements : " + result); |
Comme pour une requête HQL, il vous suffit d'employer la méthode setMaxResults sur votre Criteria pour que la recherche ne retourne par plus de résultats que voulu.
Code java : | Sélectionner tout |
1 2 | Criteria crit = session.createCriteria(Od.class); crit.setMaxResults(10); |
Par défaut, cela n'est pas possible, mais il suffit tout simplement de rajouter dans un Set les éléments de la liste renvoyée par le Criteria :
Code java : | Sélectionner tout |
1 2 | HashSet set = new HashSet(); set.addAll(session.createCriteria(MonOd.class).list()); |
Ainsi, tous les éléments de votre liste se trouveront exempts de doublons dans votre Set.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.