Hibernate

Un article de Agora2ia.


hibernate_logo.gif


Sommaire

Présentation

Hibernate est l'un des frameworks de MappingObjetRelationel (ou ORM) les plus utilisés en Java.

Il est logiciel écrit sous la responsabilité de GavinKing, qui fait entre autre partie de l'équipe de développement de JBoss.

Les développeurs manipulent les classes dont les données doivent être persistantes comme des classes Java normales. Seules une initialisation correcte d'Hibernate doit être effectuée, et quelques règles respectées lors de l'écriture et de la manipulation des classes persistantes...

Techniquement

Avancé

Les associations

Classes de persistence

Les classes de base

Les classes MaClassePK

Le mapping

La propriété composite-id

Se définie pour une classe : hibernate-mapping/class/composite-id@class="GroupPK">


<hibernate-mapping package="org.organisation.company.model">
    <class name="Group" table="GROUP">
        <meta attribute="sync-DAO">false</meta>
        <composite-id name="Id" class="GroupPK">
            <key-property
                name="QuestionGroupPos"
                column="QUESTION_GROUP_POS"
                type="integer"
            />
            <key-many-to-one
                name="Survey"
                class="Survey"
                column="SURVEY_ID"
            />
        </composite-id>

Une utilisation avancée de cette propriété, est la prise en compte de clefs étrangères constituées de plusieurs colonnes.

Imaginons trois tables :

  1. SURVEY qui possède une colonne SURVEY_ID,
  2. QUESTION_GROUP dont la clef primaire est constituée des 2 colonnes SURVEY_ID (clef étrangère vers SURVEY) et QUESTION_GROUP_POS (qui est la position du groupe dans l'enquête),
  3. QUESTION qui pointe vers un groupe de questions, et a donc une clef étrangère composée des deux colonnes SURVEY_ID et QUESTION_GROUP_POS.
 QUESTION                    QUESTION_GROUP           SURVEY
======================   ======================   ==============
SURVEY_ID          |FK-->PK| SURVEY_ID  |FK------>PK| SURVEY_ID
QUESTION_GROUP_POS |       | QUESTION_GROUP_POS   ...
...                      ...

Voilà comment cela s'implémente :

Dans le fichier QuestionGroup.hbm.xml :

...
<class name="QuestionGroup" table="QUESTION_GROUP">
    <composite-id name="Id" class="QuestionGroupPK">
        <key-property
            name="QuestionGroupPos"
            type="integer"
            column="QUESTION_GROUP_POS"
        />
        <key-many-to-one
            name="Survey"
            class="Survey"
            column="SURVEY_ID"
        />
    </composite-id>
    ...
...


Et dans le fichier Questionhbm.xml :

<class name="Question" table="QUESTION">
    ...
    <many-to-one 
        name="QuestionGroup"
        class="QuestionGroup"
        not-null="true"
    >
        <column name="QUESTION_GROUP_POS" />
        <column name="SURVEY_ID" />			
    </many-to-one>
    ...
...

Développement

Plugins pour Eclipse

Il existe plusieurs plugins Hibernate pour l'IDE Eclipse.

Le plus utilisé est s'appelle Hibernate Synchronizer.

Il existe plusieurs présentations sur le Net :

Ce plugin génère par défaut du code compatible JDK 1.5, avec notamment des collections génériques. Pour lui faire générer du code compatiable JDK 1.4, vous devez utiliser la fonctionnalité des snippets comme indiqué sur le forum en téléchargeant cette archive de snippets]...

Ressources

Sites

Documentation officielle


Présentations de Hibernate


Livres