Les nativeQuery en Hibernate 4, ou comment lancer une requête écrite « en dur »

Le 26/12/2013 Par Robin Chauvin createnativequeryhibernate 4hibernate requte en durhibernatenative query

Hibernate permet de répondre à la plupart des besoins pour créer des requêtes de tout type : du simple « SELECT FROM » aux plus complexes des requêtes imbriquées.

Pourtant, cette API ne permet pas de réaliser toutes les requêtes que l’on désire. En effet, il est malheureusement impossible de créer une requête composée d’un « MINUS », ou d’un « INTERSECT ». Il est aussi impossible d’utiliser. par exemple, des REGEX dans nos requêtes. Pourtant, il faut bien pouvoir les créer, ces requêtes.

Hibernate propose pour se faire une fonction permettant de lancer une requête écrite « en dur », c’est à dire en texte directement : la createNativeQuery.

1. Les prérequis

« ).

 

2. Fonctionnement de la nativeQuery

« . Dans cette table, on enregistre, entre autre, des codes adhérent. Certains ont une ou plusieurs lettres, d’autres n’en ont pas.

Notre objectif est de savoir combien d’adhérents ont un code ayant au moins une lettre. L’utilisation d’une REGEX est alors préconisée.

nativeQuery

{{< highlight java >}} EntityManager em = EntityManagerUtil.getEntityManager(); /*

  • SELECT COUNT(*)
  • FROM adherent
  • WHERE code REGEXP ’[a-zA-Z]+’

*/

// On écrit la requête String requete = "SELECT COUNT(*) FROM adherent WHERE code REGEXP ’[a-zA-Z]+’";

// On lance la requête et on enregistre le résultat, puis on le retourne BigInteger lResult = (BigInteger) em.createNativeQuery(requete).getSingleResult(); return lResult != null ? lResult.intValue() : 0; {{< /highlight >}}

 

3. Aller plus loin avec Hibernate 4

Dévouvrez de nombreux articles sur Hibernate 4 ;

  • La clause WHERE avec Hibernate 4
  • La clause ORDER BY avec Hibernate 4
  • La clause GROUPE BY avec Hibernate 4
  • Les fonction d’agrégat avec Hibernate 4
  • Le multiselect avec Hibernate 4

 

À voir aussi

Tous les articles