Hibernate.orgCommunity Documentation

Capítulo 22. Guia de Toolset

22.1. Geração de esquema automático
22.1.1. Padronizando o esquema
22.1.2. Executando a ferramenta
22.1.3. Propriedades
22.1.4. Usando o Ant
22.1.5. Atualizações de esquema incremental
22.1.6. Utilizando Ant para atualizações de esquema incremental
22.1.7. Validação de esquema
22.1.8. Utilizando Ant para validação de esquema

É possível realizar uma engenharia de roundtrip com o Hibernate, usando um conjunto de plug-ins de Eclipse, ferramentas de linha de comando, assim como tarefas Ant.

As Ferramentas do Hibernate atualmente incluem os plug-ins para o IDE de Eclipse assim como as tarefas para reverter a engenharia dos bancos de dados existentes:

Por favor, consulte o pacote Ferramentas do Hibernate e suas documentações para maiores informações.

No entanto, o pacote principal do Hibernate vem em lote com uma ferramenta integrada: SchemaExport aka hbm2ddl. Ele pode também ser usado dentro do Hibernate.

O DDL pode ser gerado a partir dos arquivos de mapeamento através dos utilitários do Hibernate. O esquema gerado inclui as restrições de integridade referencial, primária e chave estrangeira, para entidade e tabela de coleção. Tabelas e seqüência são também criadas por geradores de identificador mapeado.

Você deve especificar um SQL Dialect através da propriedade hibernate.dialect ao usar esta ferramenta, uma vez que o DDL é um fabricante bastante específico.

Primeiro, padronize seus arquivos de mapeamento para melhorar o esquema gerado. A próxima seção cobrirá a personalização do esquema.

Muitos elementos de mapeamento do Hibernate definem funções opcionais nomeadas length, precision e scale. Você deve ajustar o length, precision e scale de uma coluna com esta função.


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

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

Algumas tags aceitam uma função not-null para gerar uma restrição NOT NULLnas colunas de tabela e uma função unique para gerar uma restrição UNIQUE em colunas de tabela.


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

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

Uma função unique-key pode ser usada para agrupar colunas em uma restrição de chave única. Atualmente, o valor específico da função unique-key não é usada para nomear a restrição no DDL gerado, somente para agrupar as colunas no arquivo de mapeamento.


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

Uma função index especifica o nome de um indexe que será criado, usando a coluna ou colunas mapeada(s). As colunas múltiplas podem ser agrupadas no mesmo indexe, simplesmente especificando o mesmo nome de índice.


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

Uma função foreign-key pode ser usada para sobrescrever o nome de qualquer restrição de chave exterior gerada.


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

Muitos elementos de mapeamento também aceitam um elemento filho <column>. Isto é particularmente útil para mapeamento de tipos multi-colunas:


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

A função default deixa você especificar um valor padrão para uma coluna. Você deve atribuir o mesmo valor à propriedade mapeada antes de salvar uma nova instância da classe 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
>

A função sql-type permite que o usuário sobrescreva o mapeamento padrão de um tipo de Hibernate para um tipo de dados SQL.


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

A função check permite que você especifique uma restrição de verificação.


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

A seguinte tabela resume estes atributos opcionais.


O elemento <comment> permite que você especifique comentários para esquema gerado.


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

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

Isto resulta em uma instrução comment on table ou comment on column no DDL gerado, onde é suportado.