Devoxx – Les nouveautés d’Hibernate, une perspective JPA 2

Nouvelle journée d’université et, comme dans toute conférence qui se respecte, nous avons droit à une session de mise au point sur les différentes nouveautés de l’écosystème d’Hibernate d’un point de vue JPA 2.

La couverture est large : Hibernate Core, Search, Envers, Validator et Spatial. De nombreuses démos nous ont permis de nous familiariser avec ces nouveautés liées à JPA 2.
La session était animée, comme il se doit, par Emmanuel Bernard. Le code de la session est disponible sur GitHub et ce pour encore une petite semaine.

Hibernate Core – ORM

Après quelques nouveautés, dont le support de l’annotation @MapsId de JPA 2, le partial generator (pour générer une clé selon un algorithme spécifique) et le runtime fetch profile (qui définit plusieurs stratégies de fetch), Emmanuel commence sa première démo et nous présente la nouvelle API Criteria :

  • query building API orientée objet,
  • type-safe,
  • fortement typé,
  • avec la possibilité d’utiliser le méta-modèle statique (par annotation processor).

Et c’est sur ce dernier point qu’il insistera pendant toutes ses démos. En effet l’API est construite de telle manière que nous récupérerons des erreurs compile-time si un mauvais méta-modèle ou un mauvais attribut de méta-modèle est défini.

Concrètement, le méta-modèle est généré par annotation processor. Une fois celui-ci activé dans votre IDE, chaque compilation de fichier lancera le processus de génération des méta-modèles. Par exemple, une classe User aura un méta-modèle associé User_ qui contiendra plusieurs attributs statiques reflétant les attributs de la classe. Ainsi, si un attribut change de nom, toutes les requêtes utilisant l’ancien nom seront en compilation error. Voici un exemple à partir d’une capture d’un bout de code lors de cette démo :

On remarque ainsi dans les contraintes l’utilisation de User_.credits, credits étant un attribut de la classe User. On voit dès lors l’intérêt d’un tel mécanisme qui justifie ainsi son appellation type-safe et fortement typé. En effet, sur le 3ème exemple, imaginons que l’on donne un argument autre que User_.gender mais du même type que gender ; l’API nous donnera tout de même une erreur de compilation car ce qui est attendu est un Path<Gender> qui ne peut être obtenu qu’en ayant pris en paramètre un gender. Une fonctionnalité plutôt intéressante donc mais qu’il convient mieux de voir de ses propres yeux dans un IDE pour bien comprendre la puissance de la chose.

Cette nouvelle API criteria prend en compte toutes sortes de Joins et Where, les Subquery et les Map et Like. Cette API supporte ainsi tout le JP-QL : collections, maps, aggregation, order by, group by, having count, subselect, …

Le lock mode, qui prévient entre autres des dirty reads,  supporte l’optimistic et le pessimistic read/write. Le cache de second niveau a été amélioré et Hibernate supporte aussi Infinispan. Enfin, CGLIB se retrouve déprécié et se voit remplacé par Javassist.

Côté packaging, Hibernate passe de plusieurs modules à un seul core module qui contient Hibernate Annotations, Entitymanager, Envers et l’ancien Core. De même, tous les modules auront le même numéro de version simplifiant ainsi la gestion des dépendances entre modules (si un module est en 3.6.0, les autres devront l’être aussi).

Le point important est une fois de plus l’API programmatique permettant de faire ses requêtes full text directement telles que :

Dans les petits plus : un error handling pour reporter dans un log ou dans une pile, des statistiques avancées, une indexation des valeurs null, des query timeout et bien d’autres.

Hibernate Spatial

Hibernate Spatial est une extension d’Hibernate permettant de gérer des données géographiques. Il s’appuie sur le package Java Topology Suite ou JTS pour représenter les données géographiques dans le monde Java.

Voici ce que rajoute le projet à Hibernate :

  • GeometryUserType.
  • SpatialRestrictions API.
  • HQL Spatial functions.
  • SpatialDialectProvider.

Les bases de données supportées sont les suivantes :

  • Oracle Spatial.
  • Postgresql/Postgis.
  • MySQL.
  • Microsoft SQL Server 2008.
  • H2 (GeoDB).
  • IBM Informatix IDS (en cours).
  • IBM DB2 (à planifier).

Les spatial queries s’écrivent comme des requêtes criteria normales mais dans le monde spatial. Un exemple tiré du slide :

A noter que pour l’instant le projet est un module à part d’Hibernate 3 mais qu’il sera packagé dans Hibernate Core en version 4.

Hibernate Envers

Comme pour les autres modules, l’API programmatique est tout de suite mise en avant avec des requêtes Criteria par révision sur les objets :

Hibernate Validator

Là encore, l’API a aussi été remaniée et l’on peut ainsi appeler directement des méthodes du type .constraint(SizeDef.class).min(1) dans notre requête Criteria (équivalent de l’annotation @Min).

Conclusion

Un bon tour d’horizon des produits Hibernate mais surtout beaucoup de démos les mains dedans où l’on voit le tout fonctionner en @Inject et Weld sous IntelliJ IDEA. Une bonne session !

Publié par

Publié par Romain Maton

Après trois années passées chez Improve Technologies, Romain est aujourd'hui consultant Java/JEE chez Xebia. Mission après mission, il s’est forgé une solide expérience en développement Web et logiciel. Il dispose ainsi d'une très large compétence sur l'emsemble de l'ecosystème JEE, que ce soit sur les bonnes pratiques d'architecture, sur les frameworks de développement ou sur les interfaces client riches. Inconditionnel du pair programming, certifié Scrum Master, c'est un fervent disciple des méthodes Agiles. Romain est aussi un contributeur actif de la revue de presse Xebia. Il traite de nombreux sujets tels que RIA, API Java, frameworks ou bien encore Scala.

Commentaire

2 réponses pour " Devoxx – Les nouveautés d’Hibernate, une perspective JPA 2 "

  1. Publié par , Il y a 8 années

    L’approche d’Hibernate est très saine : bien s’intégrer avec le standard, mais proposer des innovations très intéressantes.

    Je regrette de pas être allé à cette session.

  2. Publié par , Il y a 5 années

    Moi je regrette pas d’y être allé.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.