Hibernate.orgCommunity Documentation

Chapitre 22. Guide de la boîte à outils

22.1. Génération automatique du schéma
22.1.1. Personnaliser le schéma
22.1.2. Exécuter l'outil
22.1.3. Propriétés
22.1.4. Utiliser Ant
22.1.5. Mises à jour incrémentales du schéma
22.1.6. Utiliser Ant pour des mises à jour de schéma par incrément
22.1.7. Validation du schéma
22.1.8. Utiliser Ant pour la validation du Schéma

Des outils en ligne de commande, des plugins Eclipse ainsi que des tâches Ant permettent de gérer le développement complet de projets à travers Hibernate.

Les outils Hibernate actuels incluent des plugins pour l'IDE Eclipse ainsi que des tâches Ant pour l'ingénierie inverse de bases de données existantes :

Veuillez-vous référer au paquetage Outils Hibernate et à sa documentation pour plus d'informations.

Cependant, le paquetage principal de Hibernate arrive avec un ensemble d'outils intégrés (il peut même être utilisé de "l'intérieur" de Hibernate à la volée) : SchemaExport aussi connu comme hbm2ddl.

La DDL peut être générée à partir de vos fichiers de mappage par un utilitaire Hibernate. Le schéma généré inclut les contraintes d'intégrité référentielle (clefs primaires et étrangères) pour les tables d'entités et de collections. Les tables et les séquences sont aussi créées pour les générateurs d'identifiants mappés.

Vous devez spécifier un Dialect SQL via la propriété hibernate.dialect lors de l'utilisation de cet outil, puisque la DDL est fortement dépendante du vendeur spécifique.

D'abord, personnalisez vos fichiers de mappage pour améliorer le schéma généré.

Plusieurs éléments du mappage Hibernate définissent des attributs optionnels nommés length, precision et scale. Vous pouvez paramétrer la taille, la précision, et l'échelle d'une colonne avec cet attribut.


<property name="zip" length="5"/>

<property name="balance" precision="12" scale="2"/>

Certaines balises acceptent aussi un attribut not-null utilisé pour générer les contraintes de colonnes NOT NULL et un attribut unique pour générer une contrainte UNIQUE de colonnes de table.


<many-to-one name="bar" column="barId" not-null="true"/>

<element column="serialNumber" type="long" not-null="true" unique="true"/>

Un attribut unique-key peut être utilisé pour grouper les colonnes en une seule contrainte d'unicité. Actuellement, la valeur spécifiée par l'attribut unique-key n'est pas utilisée pour nommer la contrainte dans la DDL générée, elle sert juste à grouper les colonnes dans le fichier de mappage.


<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/>
<property name="employeeId" unique-key="OrgEmployee"/>

Un attribut index indique le nom d'un index qui sera créé en utilisant la ou les colonnes mappées. Plusieurs colonnes peuvent être groupées dans un même index, en spécifiant le même nom d'index.


<property name="lastName" index="CustName"/>
<property name="firstName" index="CustName"/>

Un attribut foreign-key peut être utilisé pour surcharger le nom des clés étrangères générées.


<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>

Plusieurs éléments de mappage acceptent aussi un élément fils <column>. Ceci est particulièrement utile pour les type multi-colonnes :


<property name="name" type="my.customtypes.Name"/>
    <column name="last" not-null="true" index="bar_idx" length="30"/>
    <column name="first" not-null="true" index="bar_idx" length="20"/>
    <column name="initial"/>
</property
>

L'attribut default vous laisse spécifier une valeur par défaut pour une colonne. Vous devez assigner la même valeur à la propriété mappée avant de sauvegarder une nouvelle instance de la classe mappée.


<property name="credits" type="integer" insert="false">
    <column name="credits" default="10"/>
</property
>

<version name="version" type="integer" insert="false">
    <column name="version" default="0"/>
</property
>

L'attribut sql-type permet à l'utilisateur de surcharger le mappage par défaut d'un type Hibernate vers un type de données SQL.


<property name="balance" type="float">
    <column name="balance" sql-type="decimal(13,3)"/>
</property
>

L'attribut check permet de spécifier une contrainte de vérification.


<property name="foo" type="integer">
    <column name="foo" check="foo 
> 10"/>
</property
>

<class name="Foo" table="foos" check="bar < 100.0">
    ...
    <property name="bar" type="float"/>
</class
>

Le tableau suivant dresse la liste des attributs en option.


L'élément <comment> vous permet de spécifier des commentaires pour le schéma généré.


<class name="Customer" table="CurCust">
    <comment
>Current customers only</comment>
    ...
</class
>

<property name="balance">
    <column name="bal">
        <comment
>Balance in USD</comment>
    </column>
</property
>

Ceci a pour résultat une expression comment on table ou comment on column dans la DDL générée (là où elle est supportée).