Hibernate.orgCommunity Documentation

Capítulo 21. Manual del conjunto de herramientas

21.1. Generación automática de esquemas
21.1.1. Personalización del esquema
21.1.2. Ejecución de la herramienta
21.1.3. Propiedades
21.1.4. Utilización de Ant
21.1.5. Actualizaciones incrementales de esquema
21.1.6. Utilización de Ant para actualizaciones incrementales de esquema
21.1.7. Validación de Esquema
21.1.8. Utilización de Ant para la validación de esquema

La ingeniería compatible con Hibernate es posible utilizando un conjunto de plugins de Eclipse, herramientas de la línea de comandos así como tareas Ant.

Las herramientas de Hibernate actualmente incluyen plugins la IDE de Eclipse así como tareas Ant para la ingeniería inversa de bases de datos existentes:

Por favor refiérase al paquete de documentación de las Herramientas de Hibernate para obtener más información.

Sin embargo, el paquete principal de Hibernate viene con una herramienta integrada: SchemaExport también conocida como hbm2ddl. Incluso se puede utilizar "dentro" de Hibernate.

Una de las funciones de Hibernate puede generar DDL desde sus archivos de mapeo. El esquema generado incluye restricciones de integridad referencial, claves principales y foráneas, para las tablas de entidades y colecciones. También se creen tablas y secuencias para los generadores de identificadores mapeados.

Tiene que especificar un Dialecto SQL por medio de la propiedad hibernate.dialect al usar esta herramienta, ya que el DDL es altamente específico de acuerdo con el vendedor.

Primero, debe personazar sus archivos de mapeo para mejorar el esquema generado. La siguiente sección aborda la personalización del esquema.

Muchos elementos de mapeo de Hibernate definen atributos opcionales denominados length, precision y scale. Con estos atributos puede establecer el tamaño, la precisión y la escala de una columna.


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

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

Algunas etiquetas también aceptan un atributo not-null para generar una restricción NOT NULL en columnas de tablas y un atributo unique para generar restricciones UNIQUE en columnas de tablas.


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

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

Se puede usar un atributo unique-key para agrupar columnas en una restricción de clave única. Actualmente, el valor especificado del atributo unique-keyno se utiliza para nombrar la restricción en el DDL generado. Sólamente se utiliza para agrupar las columnas en el archivo de mapeo.


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

Un atributo index especifica el nombre de un índice que se creará utilizando la columa o las columnas mapeadas. Se pueden ser agrupar múltiples columnas bajo el mismo índice, simplemente especificando el mismo nombre de índice.


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

Un atributo foreign-key se puede utilizar para sobreescribir el nombre de cualquier restricción de clave foránea generada.


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

Muchos elementos de mapeo también aceptan un elemento <column> hijo. Esto es particularmente útil para mapear tipos de multi-columna:


<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
>

El atributo default le permite especificar un valor por defecto para una columna. Usted le debe asignar el mismo valor a la propiedad mapeada antes de guardar una nueva instancia de la clase mapeada.


<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 le 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
>

La siguiente tabla resume estos atributos opcionales.


El elemento <comment> le 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
>

Esto da como resultado una declaración comment on table o comment on column en el DDL generado, donde se encuentre soportado.