Présentation d'Hibernate

image

Il s'agit d'un framework dit ORM soit Object Relationnal Mapping. C'est-à-dire qu'on donne une dimension objet à la base de données relationnelle à travers des POJO grâce à un fichier de mapping XML qui fait correspondre un POJO (ou JavaBean) à chaque table de la base de données. Ceci afin de mettre en place une gestion de la persistance des données. Autrement dit, Hibernate est une surcouche à JDBC permettant de mettre en correspondance un JavaBean avec une table SQL en lui donnant une dimension objet.

Installation


Comment installer Hibernate ? Pour ce faire il faut télécharger les librairie nécessaires, ce sont des libriries open source. Voici toutes les librairies indispensables à son utilisation:



Fonctionnement


Avant de décrire le fonctionnement et l'utilisation du framework il est nécessaire d'en décrire l'architecture:

schéma application

Ce schéma nous montre comment est structuré Hibernate et nous indique la dimension persistante des objets relatifs aux tables de la base de données. Afin de réaliser ces fonctions, il faut définir et configurer le fichier de configuration et de mapping. Ces deux fichiers sont:

hibernate.cfg.xml




Analysons ce premier fichier. La première balise XML rencontrée dans ce fichier est < session-factory> [CODE] < /session-factory>. Cette balise permet de définir la responsabilité du fichier par rapport à une base de données particulière qui sera définit ultérieurement. Comme son nom l'indique c'est une fabrique de session, une session d'accès à la base de données particulière.
Dans la suite nous rencontrons des balises < property> [CODE] < /property>. La première indique une connexion à la BDD via un thread. Les quatre suivantes nous intéressent plus particulièrement car ce sont elles qui définissent la connexion à la base de données sujette à la fabrique de session.
De plus, ce fichier indique les fichiers de mapping.
Notons que ce fichier aurais pu être écrit dans un fichier nommé hibernate.properties comme le suggère le schéma ci-dessus.



Mapping




Ce deuxième fichier de mapping est celui qui rend transparent pour l'utilisateur et le programmeur le passage, pour une variable, d'un type Java à un type MySQL. Ceci s'effectue lorssque l'application Java se connecte à la base de données SQL. Ainsi Hibernate, grâce à ce fichier, sait à quelle table il doit se connecter/accèder. Cette fonction est réalisée par l'intermédiaire de la balise < class name=" " table=" " > [CODE] < /class>. La partie [CODE], comme on peut le voir plus haut, consiste à décrire les champs de la table.


Requêtes HQL


Les requêtes SQL classiques telles que nous les connaissons se substituent par des requêtes HQL (Hibernate Query Langage). Pour réaliser ces requêtes nous introduisons un autre fichier, le fichier HibernateUtil.java:




Ce fichier permet d'ouvrir une session d'accès à la base de données. Une session doit être ouverte avant chaque requête et fermer une fois terminée. Voici un exemple de requête HQL:




Cette méthode permet de réaliser l'équivalent de la requête SQL: select * from message et d'en retourner le résultat dans une liste. Remarquons que le premier mot clef de la requête est from et non select, ce qui est le cas pour tout autre type de requête. Toutes les requêtes CRUD fonctionnent ainsi, bien que les requêtes select soient les seules à ne pas passer par une transaction. En effet, pour une insertion, une mise à jour ou la suppression d'une entrée dans la BDD, il faut passer par une transaction relative à la session de la façon suivante:





Nous avons décrit, précédemment, Hibernate comme un framework permettant de faire persister les données. En effet, cette fonction de persistance intervient dès lors qu'une session est ouverte pour un objet. Tant qu'une nouvelle instance d'un objet est créée hors d'une session, l'objet est dit "éphémère" et lorsque le session dont sa session vient d'être fermé est dit "détaché". Un objet est donc persistant uniquement lorsqu'il se trouve dans une session. Notons qu'un objet "éphémère" peut être rendu persistant dès lors qu'on l'associe à une session. Tout ceci est rendu possible grâce à la classe CurrentSessionContext et le thread qui y est associé. Ce dernier par l'intermédiare de la méthode flush permet de synchroniser l'application et la BDD.




Avantages et inconvénients


Avantages


Le premier des avantages que nous pouvons citer est la facilité offerte par hibernate pour manipuler les objets. Dans le cadre d'un projet de plus grande envergure on peut citer le gain de temps qu'il est possible de retirer notamment avec l'utilisation d'outils de génération automatique de code et de la base de données. L'application java n'est plus dépendante du type de la base de données puisqu'une simple modification du fichier hibernate.cfg.xml permet de passer d'une BDD Oracle à une BDD MySQL par exemple. Ce qu'induit cet avantage est la facilité à maintenir une application basée sur ce framework, à condition toutefois de programmer de manière à factoriser le code au maximum.

Inconvénients


Le principale inconvénient est d'apprendre à utiliser hibernate. Plus précisemment d'apprendre à l'utiliser de manière efficace et optimale, ce qui nécessite un apprentissage relativement long et fastidieux. Certains problèmes ne sont pas résolus car il demeure un jeune framework.

Bibliographie


http://www.hibernate.org/
http://www.developpez.com/
http://www.eisti.fr/~vg/Documents/ProjetJEE