Guide des outils
Des outils en ligne de commande, des plugins Eclipse ainsu que des tâches Ant permettent de gérer de cycles de développement complet
de projets utilisant 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 :
Mapping Editor : un éditeur pour les fichiers de mapping XML Hibernate, supportant l'auto-complétion et la mise en valeur de la syntaxe.
Il supporte aussi l'auto-complétion automatique pour les noms de classes et les noms de propriété/champ,
le rendant beaucoup plus polyvalent qu'un éditeurXML normal.
Console : la console est une nouvelle vue d'Eclipse. En plus de la vue d'ensemble
arborescente de vos configurations de console, vous obtenez aussi une vue interactive de vos classes persistantes et de leurs relations.
La console vous permet d'exécuter des requête HQL dans votre base de données et de parcourir les résultats directement dans Eclipse.
Development Wizards : plusieurs assistants sont fournis avec les outils d'Hibernate
pour Eclipse ; vous pouvez utiliser un assistant pour générer rapidement les fichiers de configuration d'Hibernate (cfg.xml),
ou vous pouvez même complètement générer les fichiers de mapping Hibernate et les sources des POJOs à partir d'un schéma de base de données existant.
L'assistant d'ingénierie inverse supporte les modèles utilisateur.
Tâches Ant :
Veuillez-vous référer au paquet outils Hibernate et sa documentation pour plus d'informations.
Pourtant, le paquet principal d'Hibernate arrive avec un lot d'outils intégrés (il peut même être utilisé de "l'intérieur" d'Hibernate à la volée) :
SchemaExport aussi connu comme
hbm2ddl.
Génération automatique du schéma
La DDL peut être générée à partir de vos fichiers de mapping par un utilitaire d'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'identifiant mappés.
Vous devez spécifier un Dialect SQL via la propriété
hibernate.dialect lors de l'utilisation de cet outils, puisque la DDL est
fortement dépendante de la base de données.
D'abord, personnalisez vos fichiers de mapping pour améliorer le schéma généré.
Personnaliser le schéma
Plusieurs éléments du mapping hibernate définissent des attributs optionnels
nommés length, precision et scale.
Vous pouvez paramétrer la longueur, la précision,... d'une colonne avec ces attributs.
]]>
]]>
Certains éléments 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 de colonne
UNIQUE).
]]>
]]>
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 le DDL généré, elle sert juste à grouper les colonnes
dans le fichier de mapping.
]]>
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.
]]>
Un attribut foreign-key peut être utilisé pour surcharger le nom
des clés étrangères générées.
]]>
Plusieurs éléments de mapping acceptent aussi un élément fils <column>.
Ceci est utile pour les type multi-colonnes:
]]>
L'attribut default vous laisse spécifier une valeur par défaut pour
une colonnes (vous devriez assigner la même valeur à la propriété mappée avant de sauvegarder une nouvelle instance
de la classe mappée).
]]>
]]>
L'attribut sql-type laisse l'utilisateur surcharger le mapping
par défaut du type Hibernate vers un type SQL.
]]>
L'attribut check permet de spécifier une contrainte de vérification.
]]>
...
]]>
Summary
Attribut
Valeur
Interprétation
length
numérique
taille d'une colonne
precision
numérique
précision décimale de la colonne
scale
numérique
scale décimale de la colonne
not-null
true|false
spécifie que la colonne doit être non-nulle
unique
true|false
spécifie que la colonne doit avoir une contrainte d'unicité
index
index_name
spécifie le nom d'un index (multi-colonnes)
unique-key
unique_key_name
spécifie le nom d'une contrainte d'unicité multi-colonnes
foreign-key
foreign_key_name
spécifie le nom d'une contrainte de clé étrangère générée pour
une association, utilisez-la avec les éléments de mapping
<one-to-one>, <many-to-one>, <key>, et <many-to-many>
Notez que les extrêmités inverse="true"
se seront pas prises en compte par SchemaExport.
sql-type
SQL column_type
surcharge le type par défaut (attribut de
l'élément <column> uniquement)
default
expression SQL
spécifie une valeur par défaut pour la colonne
check
SQL expression
crée une contrainte de vérification sur la table ou la colonne
L'élément <comment> vous permet de spécifier un commentaire pour le schéma généré.
Current customers only
...
]]>
Balance in USD
]]>
Ceci a pour résultat une expression
comment on table ou
comment on column dans la DDL générée (où supportée).
Exécuter l'outil
L'outil SchemaExport génère un script DDL vers
la sortie standard et/ou exécute les ordres DDL.
java -cp classpath_hibernate
net.sf.hibernate.tool.hbm2ddl.SchemaExport options fichiers_de_mapping
SchemaExport Options de la ligne de commande
Option
Description
--quiet
ne pas écrire le script vers la sortie standard
--drop
supprime seuleument les tables
--create
ne créé que les tables
--text
ne pas exécuter sur la base de données
--output=my_schema.ddl
écrit le script ddl vers un fichier
--naming=eg.MyNamingStrategy
sélectionne une NamingStrategy
--config=hibernate.cfg.xml
lit la configuration Hibernate à partir d'un fichier XML
--properties=hibernate.properties
lit les propriétés de la base de données à partir d'un fichier
--format
formatte proprement le SQL généré dans le script
--delimiter=x
paramètre un délimiteur de fin de ligne pour le script
Vous pouvez même intégrer SchemaExport dans votre application :
Propriétés
Les propriétés de la base de données peuvent être spécifiées
comme propriétés système avec -D<property>
dans hibernate.properties
dans un fichier de propriétés déclaré avec --properties
Les propriétés nécessaires sont :
SchemaExport Connection Properties
Nom de la propriété
Description
hibernate.connection.driver_class
classe du driver JDBC
hibernate.connection.url
URL JDBC
hibernate.connection.username
utilisateur de la base de données
hibernate.connection.password
mot de passe de l'utilisateur
hibernate.dialect
dialecte
Utiliser Ant
Vous pouvez appeler SchemaExport depuis votre script
de construction Ant :
]]>
Mises à jour incrémentales du schéma
L'outil SchemaUpdate mettra à jour un schéma existant
en effectuant les changement par "incrément".
Notez que SchemaUpdate dépends beaucoup de l'API JDBC
metadata, il ne fonctionnera donc pas avec tous les drivers JDBC.
java -cp classpath_hibernate
net.sf.hibernate.tool.hbm2ddl.SchemaUpdate options fichiers_de_mapping
SchemaUpdate Options de ligne de commande
Option
Description
--quiet
ne pas écrire vers la sortie standard
--text
ne pas exporter vers la base de données
--naming=eg.MyNamingStrategy
choisit une NamingStrategy
--properties=hibernate.properties
lire les propriétés de la base de données à partir d'un fichier
Vous pouvez intégrer SchemaUpdate dans votre application :
Utiliser Ant pour des mises à jour de schéma par incrément
Vous pouvez appeler SchemaUpdate depuis le script Ant :
]]>
Validation du schéma
L'outil SchemaValidator validera que le schéma existant correspond à vos documents de mapping.
Notez que le SchemaValidator dépends de l'API metadata de JDBC, il ne fonctionnera
donc pas avec tous les drivers JDBC. Cet outil est extrêmement utile pour tester.
java -cp hibernate_classpaths
org.hibernate.tool.hbm2ddl.SchemaValidator options mapping_files
SchemaValidator Options de ligne de commande
Option
Description
--naming=eg.MyNamingStrategy
Indique une NamingStrategy
--properties=hibernate.properties
lit les propriétés dela base de données depuis un fichier de propriétés
--config=hibernate.cfg.xml
indique un fichier .cfg.xml
Vous pouvez inclure SchemaValidator dans votre application:
Utiliser Ant pour la validation du Schéma
Vous pouvez appeler SchemaValidator depuis le script Ant:
]]>