Vous êtes sur la page 1sur 13

Hibernate


HQL - JPQL


1
Langages de requête objet
! Les ORM ajoutent un langage de requête
orienté objet
! le langage sert à exécuter des requêtes sur les
entités persistées en base tout en gardant la
logique du modèle objet
"
! HQL : Hibernate Query Langage
"
! JPQL : Java Persistence Query Langage
! d'autres langages de ce type existent
– EJB-QL, ...

2
Langages de requête objet
! Ces langages sont case sensitive sur le nom
des classes et des propriétés
"
"
! JPQL est très proche de HQL
! XML pour Hibernate natif
! annotations pour JPA

3
Interface Query
! Les requêtes sont représentées par une
instance de Query
! obtenue via la méthode createQuery(String)
sur la session ou l'entityManager
"
! L'exécution de la requête retourne une liste de
résultats ou un résultat unique
! JPA : getResultList() et
getSingleResult()
! HQL : list() et uniqueResult()
! beaucoup d'autres méthodes sont disponibles
– cf. les javadoc JPA et Hibernate

4
Exemples de clause
!from Contact
!renvoie toutes les instances de type Contact

!from Contact as c

!renvoie toutes les instances de type Contact

!en associant un alias c utilisable dans d'autres parties

de la requête
–as est facultatif

5
Exemples de clause
! select * from Contact as c
!renvoie toutes les instances de Contact

! select c.nom,c.prenom from Contact as c


!renvoie les propriétés nom et prenom des instances de

Contact
–sous forme d'une tableau Object[]

6
Exemples de clause
!select new list(c.nom,c.prenom) from
Contact as c
!renvoie les propriétés nom et prenom des instances de

Contact
!sous forme d'une List
!select * from Contact as c where

c.nom='toto'
!renvoie les instances de Contact correspondant à la

clause WHERE

7
Langages de requête objet
! HQL et JPQL permettent :
!les jointures : inner join, left outer join, right outer join
!les fonctions d'agrégation : sum, max, count, avg, ...

!l'utilisation d'expressions avec les opérateurs

mathématiques, de comparaison, logiques


–in, not in, between, is null, is not null, ...
!l'utilisation de sous requêtes
!et bien plus ...

8
Exécution des requêtes
! Exemple Hibernate natif
! ici la requête est codée

...!
Query q = session.createQuery("from Contact");!
List<Contact> contacts = q.list();!
for(Contact c : contacts){!
! System.out.println(c.getNom()+" "+c.getPrenom());!
}!
...

9
Exécution des requêtes
! Hibernate natif
! les requêtes peuvent être déclarées dans le fichier
hbm
– dans l'élément <hibernate-mapping>
"
...!
" <query name="personne.getPersonneByEmail">!
! <![CDATA[FROM Personne as p WHERE p.email=:email]]>!

...
la requête nommée est alors utilisée via la méthode
–</query>! paramètre de la
requête
session.getNamesQuery(nomRequete)

Query query = session.getNamedQuery("personne.getPersonneByEmail");!


query.setString("email", "glagaffe@toto.titi");
initialisation du
paramètre de la
requête

10
Exécution des requêtes
! Les requêtes sont créées via l'EntityManager
!
createQuery() pour les requêtes JPQL
!
createNamedQuery() pour les requêtes nommées
"
! définies par les annotations
–@NamedQueries({…})

–@NamedQuery()

"
"
! Les requêtes peuvent comporter des paramètres

11
Exécution des requêtes
! JPA : exemple de requête avec paramètres
"
public List<Video> getVideoParTitre(String titre)!
" {!
! Query query = em.createQuery("from Produit p where p.titre like :titre");!
" !
!
query.setParameter("titre", titre+"%");!
return query.getResultList();!
}!
"
! JPA : les paramètres peuvent aussi être indicés

public List<Video> getVideoParTitre(String titre)!


{!
! Query query = em.createQuery("from Produit p where p.titre like ?1");!
! query.setParameter(1, titre+"%");!
! return query.getResultList();!
}!

12
Exécution des requêtes
! JPA : les requêtes nommées
! mise en place par annotation
"
...!
" @NamedQueries({!
@NamedQuery(name="CDAudio.getParArtiste",!
" !
})!
! ! query="from CDAudio cd where cd.artiste = :artiste

public class CDAudio extends Produit!


" ...

! utilisation
...!
public List<CDAudio> getCDAudiosParArtiste(String artiste)!
{!
! Query query = em.createNamedQuery("CDAudio.getParArtiste");!
! query.setParameter("artiste", artiste);!
! return query.getResultList();!
}!
...

13

Vous aimerez peut-être aussi