Hibernate.orgCommunity Documentation
Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, and Ant tasks.
Hibernate Tools currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:
Mapping Editor: an editor for Hibernate XML mapping files that supports auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it more versatile than a normal XML editor.
Console: the console is a new view in Eclipse. In addition to a tree overview of your console configurations, you are also provided with an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse.
Development Wizards: several wizards are provided with the Hibernate Eclipse tools. You can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or to reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates.
Please refer to the Hibernate Tools package documentation for more information.
However, the Hibernate main package comes bundled with an integrated tool : SchemaExport aka hbm2ddl
.It can even be used from "inside" Hibernate.
DDL can be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints, primary and foreign keys, for entity and collection tables. Tables and sequences are also created for mapped identifier generators.
You must specify a SQL Dialect
via the hibernate.dialect
property when using this tool, as DDL is highly vendor-specific.
First, you must customize your mapping files to improve the generated schema. The next section covers schema customization.
Many Hibernate mapping elements define optional attributes named length
, precision
and scale
. You can set the length, precision and scale of a column with this attribute.
<property name="zip" length="5"/>
<property name="balance" precision="12" scale="2"/>
Some tags also accept a not-null
attribute for generating a NOT NULL
constraint on table columns, and a unique
attribute for generating UNIQUE
constraint on table columns.
<many-to-one name="bar" column="barId" not-null="true"/>
<element column="serialNumber" type="long" not-null="true" unique="true"/>
A unique-key
attribute can be used to group columns in a single, unique key constraint. Currently, the specified value of the unique-key
attribute is not used to name the constraint in the generated DDL. It is only used to group the columns in the mapping file.
<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/> <property name="employeeId" unique-key="OrgEmployee"/>
An index
attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns can be grouped into the same index by simply specifying the same index name.
<property name="lastName" index="CustName"/> <property name="firstName" index="CustName"/>
A foreign-key
attribute can be used to override the name of any generated foreign key constraint.
<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>
Many mapping elements also accept a child <column>
element. This is particularly useful for mapping multi-column types:
<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 >
The default
attribute allows you to specify a default value for a column.You should assign the same value to the mapped property before saving a new instance of the mapped class.
<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 >
El atributo sql-type
permite al usuario sobrescribir el mapeo por defecto de tipo Hibernate a tipo de datos SQL.
<property name="balance" type="float"> <column name="balance" sql-type="decimal(13,3)"/> </property >
El atributo check
te permite especificar una comprobación de restricción.
<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 >
The following table summarizes these optional attributes.
Tabla 20.1. Resumen
Atributo | Valores | Interpretación |
---|---|---|
length | number | largo de columna/precisión decimal |
precision | number | column decimal precision |
scale | number | column decimal scale |
not-null | true|false | specifies that the column should be non-nullable |
unique | true|false | especifica que la columna debe tener una restricción de unicidad |
index | index_name | especifica el nombre de un índice (multicolumna) |
unique-key | unique_key_name | especifica el nombre de una restricción de unicidad multicolumna |
foreign-key | foreign_key_name | especifica el nombre de la restricción de clave foránea generada por una asociación, úsalo e <one-to-one> , <many-to-one> , <key> , or <many-to-many> . Nota que los lados inverse="true" no serán considerados por SchemaExport . |
sql-type | column_type | sobrescribe el tipo de columna por defecto (sólo atributo del elemento <column> ) |
default | SQL expression | specify a default value for the column |
check | SQL expression | crea una restricción de comprobación SQL en columna o tabla |
El elemento <comment>
te permite especificar un comentario para el esquema generado.
<class name="Customer" table="CurCust"> <comment >Current customers only</comment> ... </class >
<property name="balance"> <column name="bal"> <comment >Balance in USD</comment> </column> </property >
This results in a comment on table
or comment on column
statement in the generated DDL where supported.
La herramienta SchemaExport
escribe un guión DDL a la salida estándar y/o ejecuta las sentencias DDL.
The following table displays the SchemaExport
command line options
java -cp
classpaths_de_hibernate org.hibernate.tool.hbm2ddl.SchemaExport
opciones ficheros_de_mapeo
Tabla 20.2. Opciones de Línea de Comandos de SchemaExport
Opción | Descripción |
---|---|
--quiet | do not output the script to stdout |
--drop | sólo desechar las tablas |
--create | only create the tables |
--text | do not export to the database |
--output=my_schema.ddl | enviar la salida del guión ddl a un fichero |
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--config=hibernate.cfg.xml | lee la configuración de Hibernate de un fichero XML |
--properties=hibernate.properties | lee las propiedades de base de datos de un fichero |
--format | formatea agradablemente el SQL generado en el guión |
--delimiter=x | establece un delimitador de fin de línea para el guión |
You can even embed SchemaExport
in your application:
Configuration cfg = ....; new SchemaExport(cfg).create(false, true);
Database properties can be specified:
como propiedades de sistema con -D
<property>
en hibernate.properties
en un fichero de propiedades mencionado con --properties
Las propiedades necesarias son:
Tabla 20.3. Propiedades de Conexión de SchemaExport
Nombre de Propiedad | Descripción |
---|---|
hibernate.connection.driver_class | clase del driver jdbc |
hibernate.connection.url | url de jdbc |
hibernate.connection.username | usuario de base de datos |
hibernate.connection.password | contraseña de usuario |
hibernate.dialect | dialecto |
Puedes llamar a SchemaExport
desde tu guión de construcción de Ant:
<target name="schemaexport"> <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="class.path"/> <schemaexport properties="hibernate.properties" quiet="no" text="no" drop="no" delimiter=";" output="schema-export.sql"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaexport> </target >
The SchemaUpdate
tool will update an existing schema with "incremental" changes. The SchemaUpdate
depends upon the JDBC metadata API and, as such, will not work with all JDBC drivers.
java -cp
classpaths_de_hibernate org.hibernate.tool.hbm2ddl.SchemaUpdate
opciones ficheros_de_mapeo
Tabla 20.4. Opciones de Línea de Comandos de SchemaUpdate
Opción | Descripción |
---|---|
--quiet | do not output the script to stdout |
--text | do not export the script to the database |
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--properties=hibernate.properties | lee las propiedades de base de datos de un fichero |
--config=hibernate.cfg.xml | specify a .cfg.xml file |
You can embed SchemaUpdate
in your application:
Configuration cfg = ....; new SchemaUpdate(cfg).execute(false);
Puedes llamar a SchemaUpdate
desde el guión de Ant:
<target name="schemaupdate"> <taskdef name="schemaupdate" classname="org.hibernate.tool.hbm2ddl.SchemaUpdateTask" classpathref="class.path"/> <schemaupdate properties="hibernate.properties" quiet="no"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemaupdate> </target >
The SchemaValidator
tool will validate that the existing database schema "matches" your mapping documents. The SchemaValidator
depends heavily upon the JDBC metadata API and, as such, will not work with all JDBC drivers. This tool is extremely useful for testing.
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaValidator
options mapping_files
Tabla 20.5. SchemaValidator
Command Line Options
Opción | Descripción |
---|---|
--naming=eg.MyNamingStrategy | select a NamingStrategy |
--properties=hibernate.properties | lee las propiedades de base de datos de un fichero |
--config=hibernate.cfg.xml | specify a .cfg.xml file |
You can embed SchemaValidator
in your application:
Configuration cfg = ....; new SchemaValidator(cfg).validate();
You can call SchemaValidator
from the Ant script:
<target name="schemavalidate"> <taskdef name="schemavalidator" classname="org.hibernate.tool.hbm2ddl.SchemaValidatorTask" classpathref="class.path"/> <schemavalidator properties="hibernate.properties"> <fileset dir="src"> <include name="**/*.hbm.xml"/> </fileset> </schemavalidator> </target >
Copyright © 2004 Red Hat Middleware, LLC.