Hibernate
Signature : | Mis en ligne le : 26/03/2013
Catégorie(s) :
  • GNU/Linux Magazine HS
  • Commentez
    Article publié dans :
    Achetez
    Linux Magazine HS 56 :
    Version Papier
    Version PDF
    Page 1/5
    Page suivante »

    Hibernate est un framework de persistance open source permettant d’utiliser des objets métiers stockés dans une base de données relationnelle. Il est devenu en quelque temps l’un des plus populaires de sa catégorie. Hibernate a été écrit sous la responsabilité de Gavin King, qui fait partie de l’équipe Jboss.

    1. Principe du mapping

    Travailler dans les deux univers que sont l'orienté objet et la base de données relationnelle peut être lourd et consommateur en temps. Hibernate se propose de joindre ces deux univers, à travers le mapping objet/relationnel. Le terme mapping objet/relationnel (ORM) décrit la technique consistant à faire le lien entre la représentation objet des données et sa représentation relationnelle, basé sur un schéma SQL.

    Hibernate s'occupe du transfert des classes Java dans les tables de la base de données (et des types de données Java dans les types de données SQL). Il permet également de requêter les données et propose des moyens de les récupérer.

    Un fichier de mapping permet de lier la base de données avec les objets persistants. Il est écrit en XML. Ce fichier est chargé en mémoire au démarrage d’Hibernate.

    Le mapping sert pour Hibernate à générer à la volée les requêtes SQL de façon transparente pour le développeur.

    2. La session Hibernate

    Lors de l’écriture d’un service métier, la première chose que fait un développeur qui utilise Hibernate est de demander une " session ". Il s’agit d’un objet qui contient une connexion à la base de données et un cache d’objet persistant. La session représente donc un contexte d’utilisation. À partir d’une session, le développeur peut demander le chargement d’objets persistant, l’exécution d’une requête ou l’appel à la sauvegarde des objets modifiés.

    Exemple :

    La session s’obtient à l’aide d’une SessionFactory (une " usine " à session).

    3. Le chargement paresseux des liens

    Comme nous l’avons vu précédemment, c’est la session qui permet d’avoir accès à la base de données et d’effectuer des requêtes.

    Cependant, les objets métiers gérés par Hibernate ne sont pas liés à cette session. Ils ne peuvent donc pas appeler directement la persistance. Ceci correspond à la volonté d’isoler les " couches " présentation et métier. L’objet persistant peut être transporté entre deux couches et être affiché dans une page JSP. Or dans la couche de présentation, on ne doit pas avoir accès à la persistance. La session Hibernate ne doit pas être connue de la couche de présentation.

    Pourtant, un objet métier comporte des liens avec d’autres objets, et ces liens peuvent être chargés de façon paresseuse. Il faut donc un moyen pour que, depuis l’objet métier, ces liens soient lus sur la base de données à l’aide de requêtes SQL.

    Dans le monde Hibernate, les liens sont appelés des collections persistantes. Ce sont obligatoirement des instances de java.util.List, java.util.Bag, java.util.Set ou java.util.Map. Ces 4 types Java sont en fait des interfaces.

    Exemple :

    La méthode getAdresses() renvoie une instance qui implémente l’interface List. Elle n’effectue pas d’initialisation de cette liste, ni d’appel à une requête de chargement, puisque l’objet PersonnePhysique n’a pas accès à la session.

    Et pourtant, depuis une personne physique, on peut accéder à ses adresses de la façon suivante :

    La méthode iterator() effectue le chargement paresseux de la collection. Ceci ne peut fonctionner que si la session qui a chargé la personne physique n’a pas été fermée.

    3.1. Comment fonctionne le lazy load ?

    En fait, la méthode getAdresses() renvoie une instance de la classe PersistentList, qui est une sous-classe de PersistentCollection. La classe PersistentList implémente l’interface java.util.List.

    L’instance de PersistentList est placée dans l’attribut adresses lors du chargement par la session de la personne physique.

    Une PersistentCollection pointe vers la session qui l’a créée. C’est par ce moyen qu’elle peut effectuer la requête SQL de chargement des items de la collection.

    4. Utilisation d’Hibernate dans la couche " service "

    Le service est un composant clé de l'Architecture Orientée Services. Il consiste en une fonction ou fonctionnalité bien définie. C'est aussi un composant autonome qui ne dépend d’aucun contexte ou service externe. Il est divisé en opérations qui constituent autant d'actions spécifiques que le service peut réaliser.

    4.1. Gestion de la session dans un service

    Chaque opération est implémentée par une méthode d’une classe. Cette méthode peut être découpée en sous-méthode, il faut s’assurer qu’elles partagent toutes la même session Hibernate.

    Il ne doit y avoir qu’une et une seule session active au cours du Thread utilisateur. Si on définit des classes pour implémenter les services, il y a plusieurs techniques disponibles pour s’assurer d’une session unique :

    1) Les services sont implémentés dans des méthodes statiques. La session doit être gardée dans une variable static avec un ThreadLocal.

    2) Les services sont des classes instanciées pour chaque utilisateur (attention au nombre d’instances en mémoire), la session est alors gardée en variable d’instance de chaque classe service.

    Vous souhaitez commenter cet article ?
    Brèves Flux RSS
    Édito : GNU/Linux Magazine Hors-Série N°72
    Édito : Linux Pratique N°84
    Édito : MISC N°74
    Édito : GNU/Linux Magazine N°173
    Édito : MISC Hors-Série N°9
    Communication RSS Com. RSS Presse
    HACKITO ERGO SUM
    GNU/Linux Magazine, partenaire du SymfonyLive Paris
    Opensilicium, partenaire de RTS EMBEDDED
    Linux Pratique et Linux Essentiel, Partenaire de l’Open World Forum
    Gnu/Linux Magazine, Partenaire des JDEV 2013
    Rechercher un article dans notre base documentaire :
    En kiosque Flux RSS

    Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Open Silicium est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...