
La FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 5 juin 2009
Sommaire→Utilisation→Le language HQLHibernate Query Langage est un langage d'interrogation des classes persistantes avec une syntaxe proche du SQL. Cependant les objets manipulés sont les classes et membres du mapping contrairement au SQL qui réalise les requêtes directement sur la base de données. Aussi, le HQL contient des fonctionnalités spécifiques au modèle objet.
Les requêtes HQL peuvent être formées des éléments principaux suivants :
- les clauses (from, select, where, order by, ...)
- les fonctions d'agrégation (count, sum, avg, max, ...)
- les sous-requêtes (il s'agit de requêtes HQL dont le résultat est utilisé dans une requête HQL principale)
Exemple :
FROM infos.Contact contact WHERE contact.nom = 'Dupont'
Cette requête sélectionne tous les contacts, dans la classe infos.Contact, ayant comme nom Dupont. Vous remarquerez l'utilisation d'un alias essentiel si on fait référence à la classe dans différents endroits de la requête.
Lien : Plus d'infos
Lien : Comment exécuter du code HQL ?
Lien : Les requêtes HQL sont-elles sensibles à la casse ?
Pour exécuter une requête HQL, il vous faut employer la méthode createQuery() sur votre session :
Query query = session.createQuery("Requête HQL");
Ensuite, si c'est une requête de sélection, vous pouvez récupérer les résultats avec la méthode list() ou alors exécuter la requête avec la méthode executeUpdate().
Non, les requêtes HQL ne sont pas sensibles à la casse, sauf pour tout ce qui concerne le nom des classes Java et des propriétés.
Ainsi FrOm est tout à fait égal à FROM et à from. Mais from Cat n'est pas égal à from cAt.
Pour pouvoir insérer des quotes dans une requête, il suffit de doubler tous les ' dans votre requête. Par exemple :
FROM table WHERE field LIKE 'C''est'
Vous pouvez directement employer next() sur le résultat de votre requête HQL pour ne pas avoir à initialiser votre collection et simplement compter le nombre de résultats en employant count(*) :
((Integer) session.iterate("select count(*) from ....").next() ).intValue();
Il suffit d'employer la méthode setMaxResults de votre Query :
Query query = sess.createQuery("Votre requête HQL");
query.setMaxResults(10);
List results = query.list();
10 étant le nombre maximal d'enregistrements retournés par la requête.


















