Blue Flower

Chercher

Généralité et pré-requis
L'annotation dans le monde Java est une technique qui permet de "marquer" certains éléments au sein d'un programme afin de leur ajouter une propriété particulière. Ces annotations peuvent ensuite être utilisées à la compilation ou à l'exécution pour automatiser certaines tâches.
Les annotations peuvent être divisées en deux catégories, les annotations de mapping logique (vous permettant de décrire le modèle objet, les associations de classe, etc....) et les annotations de mapping physique (décrivant le schéma physique, les tables, les colonnes, les index, etc...)
Pour utiliser les annotations avec Hibernate il faut un certain nombre de pré-requis :

Une version de Hibernate supérieure ou égale à Hibernate 3.2.0.GA
une version de JDK supérieure ou égale JDK 5.0
D'abord, on commence par paramètrer le classpath; on copie toutes les bibliothéques du noyau Hibernate3, toutes les bibliothéques requises pour les annotations comme, "hibernate-annotations.jar" et "lib/ejb3-persistence.jar" de la distribution Hibernate Annotations dans le classpath.
On crée un repertoire lib dans le repertoire de développement et on y copie les fichiers.jar suivants:

//Hibernate 3
          commons-logging.jar
          dom4j.jar
          javassist.jar
          antlr.jar
          commons-collections.jar
          cglib.jar
          hibernate3.jar
          asm-attrs.jar
          asm.jar
          c3p0-0.9.1.jar
          hibernate-entitymanager.jar
          iijdbc.jar
          j2ee.jar
          concurrent-1.3.2.jar
          javassist.jar
          jboss-archive-browsing.jar
          ehcache-1.2.3.jar
          log4j-1.2.11.jar                    
  //Hibernate Annotations
          hibernate-annotations.jar
          ejb3-persistence.jar
   

Il faut que dans le classpath on ait tous les pré-requis pour la compilation et l'exécution de l'application.
L'annotation avec Hibernate a pour but de se passer des fichiers "hbm.xml" qui permettent de configurer chaque classe que l'on veut rendre persistente. Les différents éléments qu'on peut annotés seront ilustrés dan différents exemples.Les annotations sont directement injectés dans les classes relatives aux classes persistentes.

Configuration

Si on utilise Hibernate en s'appuyant sur un fichier de configuration, Les packages, les classes annotées sont déclarés dans le fichier de configuration XML (généralement hibernate.cfg.xml) comme le montre l'exemple de fichier de configuration hibernat.cfg.xml suivant :

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
        <hibernate-configuration>
          <session-factory>
            <mapping package="test.animals"/>
            <mapping class="test.Flight"/>
            <mapping class="test.Sky"/>
            <mapping class="test.Person"/>
            <mapping class="test.animals.Dog"/>
            <mapping resource="test/animals/orm.xml"/>
          </session-factory>
        </hibernate-configuration>
 

On voit bien que l'on indique le package (test.animals) concerné par les annotions ainsi les différentes classes(test.Flight, test.Person, test.animals.Dog ) et ressources.

Programmation

Si on n'utilise pas un fichier de configuration pour se servir de Hibernate mais de la programmation, on rend visible les packages et les classes concernés par les annotions en procédant comme suit:

  sessionFactory = new AnnotationConfiguration()
                    .addPackage("test.animals") //the fully qualified package name
                    .addAnnotatedClass(Flight.class)
                    .addAnnotatedClass(Sky.class)
                    .addAnnotatedClass(Person.class)
                    .addAnnotatedClass(Dog.class)
                    .addResource("test/animals/orm.xml")
                    .configure().buildSessionFactory();

EntityManager

On peut aussi utiliser Hibernate EntityManager qui a son propre mécanisme de configuration. Il n'y a pas d'autres différences dans la façon d'utiliser les APIs d'Hibernate, excepté ce changement de routine de démarrage ou le fichier de configuration. Vous pouvez utiliser votre méthode de configuration favorite pour d'autres propriétés (hibernate.properties, hibernate.cfg.xml, utilisation des APIs, etc). Vous pouvez même mélanger les classes persistantes annotées et des déclarations hbm.cfg.xml classiques avec la même SessionFactory. Vous ne pouvez cependant pas déclarer une classe plusieurs fois (soit avec les annotations, soit avec un fichier hbm.xml). Vous ne pouvez pas non plus mélanger des stratégies de configuration (hbm vs annotations) dans une hiérarchie d'entités mappées.
Pour faciliter la procédure de migration de fichiers d'extension ".hbm.xml" vers les annotations, le mécanisme de configuration détecte la duplication de mappings entre les annotations et les fichiers d'extension ".hbm.xml" . Les classes décrites dans les fichiers hbm se voient alors affecter une priorité plus grande que les classes annotées. Vous pouvez changer cette priorité avec la propriété hibernate.mapping.precedence. La valeur par défaut est : hbm, class ; la changer en : class, hbm donne alors la priorité aux classes annotées lorsqu'un conflit survient

précédent suivant