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.


SommaireUtilisationLes Criteria (9)
précédent sommaire suivant
 

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.

Mis à jour le 28 octobre 2006 Robin56

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 :

Code java :
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 :
List results = criteria.list();

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

Mis à jour le 11 février 2008 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 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 :
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).

Mis à jour le 11 février 2008 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 :

Code java :
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();

Mis à jour le 2 novembre 2006 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 vous voulez trouver tous les autres films de ce même réalisateur :

Code java :
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();

Mis à jour le 11 février 2008 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 :

Code java :
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();

Mis à jour le 2 novembre 2006 Baptiste Wicht

Vous pouvez ajouter une Projection à votre Criteria :

Code java :
criteria.setProjection(Projections.rowCount());

Et dire ensuite que vous voulez récupérer un seul résultat :
Code java :
Integer result = (Integer) criteria.uniqueResult();

Donc pour une requête complète, vous pouvez faire :
Code java :
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);

Mis à jour le 28 octobre 2006 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.

Code java :
1
2
Criteria crit = session.createCriteria(Od.class); 
crit.setMaxResults(10);

Mis à jour le 28 octobre 2006 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 :

Code java :
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.

Mis à jour le 28 octobre 2006 Baptiste Wicht

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2014 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.

 
 
 
 
Partenaires

PlanetHoster
Ikoula