Les FAQs Java :
FAQ JAVA FAQ Java EE FAQ Java ME FAQ Java XML FAQ JavaFX FAQ Java GUI FAQ Struts FAQ JSF FAQ JDBC JDO FAQ Hibernate FAQ Spring FAQ Eclipse FAQ NetBeans FAQ JCreator FAQ Maven 2

La FAQ HibernateConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 5 juin 2009 

 
OuvrirSommaireUtilisationLes Criteria

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.

Créé le 2006-10-28  par Baptiste Wicht

Lien : Comment effectuer une requête avec 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 :

 
Sélectionnez
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).

 
Sélectionnez
List results = criteria.list();

Vous avez maintenant tous vos résultats sous forme d'objet dans votre liste.

Mis à jour le 2008-02-11  par Baptiste Wicht

Lien : Comment récupérer le résultat d'un Criteria dans un Set ?

Avec Criteria, vous pouvez ajouter des restrictions qui vous permettront de limiter les résultats en fonctions de différents critères.

Pour cela, nous allons ajouter des Criterions, que va nous fournir la classe restriction. Par exemple pour un like :

 
Sélectionnez
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).

Mis à jour le 2008-02-11  par Baptiste Wicht

Lien : Comment grouper les restrictions de manière logique ?
Lien : La classe Restrictions

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 :

 
Sélectionnez
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();
Créé le 2006-11-02  par Baptiste Wicht

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 que vous voulez trouver tous les autres films de ce même réalisateur :

 
Sélectionnez
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();
Mis à jour le 2008-02-11  par Baptiste Wicht

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 :

 
Sélectionnez
Criteria criteria = session.createCriteria(Od.class)
    .add(Restrictions.between("weigth", 200, 500))
    .addOrder(Order.asc("weigth"))
    .addOrder(Order.desc("nom"));
List results = criteria.list();
Créé le 2006-11-02  par Baptiste Wicht

Vous pouvez ajouter une Projection à votre Criteria :

 
Sélectionnez
criteria.setProjection(Projections.rowCount());

Et dire ensuite que vous voulez récupérer un seul résultat :

 
Sélectionnez
Integer result = (Integer) criteria.uniqueResult();

Donc pour une requête complète, vous pouvez faire :

 
Sélectionnez
Criteria criteria = session.createCriteria(OdPersonne.class);
criteria.setProjection(Projections.rowCount());
Integer result = (Integer) criteria.uniqueResult();
System.out.println("Nombre d'enregistrements : " + result);
Créé le 2006-10-28  par Baptiste Wicht

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.

 
Sélectionnez
Criteria crit = session.createCriteria(Od.class);
crit.setMaxResults(10);
Créé le 2006-10-28  par Baptiste Wicht

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 :

 
Sélectionnez
HashSet set =  new HashSet();
set.addAll(session.createCriteria(MonOd.class).list());

Ainsi, tous les éléments de votre liste se trouveront exemptes de doublons dans votre Set.

Créé le 2006-10-28  par Baptiste Wicht
  

Les 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 © 2006 - 2009 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. Cette page est déposée.