Hibernate.orgCommunity Documentation

第21章 ツールセットガイド

21.1. スキーマの自動生成
21.1.1. スキーマのカスタマイズ
21.1.2. ツールの実行
21.1.3. プロパティ
21.1.4. Ant を使用する
21.1.5. インクリメンタルなスキーマ更新
21.1.6. インクリメンタルなスキーマ更新に対する Ant の使用
21.1.7. Schema validation
21.1.8. スキーマのバリデーションに Ant を使用します

Hibernate を使ったラウンドトリップエンジニアリングは、 Eclipse プラグインやコマンドラインツール、もちろん Ant タスクを使うことで可能です。

Hibernate Tools は現在、既存データベースのリバースエンジニアリングの Ant タスクに加えて、 Eclipse IDE のプラグインを含みます:

より詳しい情報は Hibernate Tools パッケージとそのドキュメントを参照してください。

しかし、 Hibernate のメインパッケージは SchemaExport 、別名 hbm2ddl も含みます(Hibernate 「内」でオンザフライで使用できます)。

DDL は Hibernate ユーティリティによりマッピングファイルから生成することができます。生成されたスキーマはエンティティやコレクションのテーブルに対する参照整合性制約 (主キーと外部キー) を含みます。テーブルとシーケンスはマッピングする識別子ジェネレータに対して生成されます。

DDL はベンダー依存なので、このツールを使うときは、 hibernate.dialect プロパティで SQL の 方言 を指定 しなければなりません

まず、生成されるスキーマを改善するように、マッピングファイルをカスタマイズしてください。

多くの Hibernate のマッピング要素では、オプションの lengthprecisionscale という名の属性を定義しています。この属性でカラムの長さ、精度、スケールを設定することができます。


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

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

not-null 属性(テーブルのカラムへ NOT NULL 制約を生成する)と unique 属性(テーブルのカラムへ UNIQUE 制約を生成する)が設定できるタグもあります。


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

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

unique-key 属性はカラムをグループ化して一つのキー制約にするために使われます。現在、 unique-key 属性で指定された値は制約の指定には 使われず 、マッピングファイルでカラムをグループ化することにのみ使われます。


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

index 属性はマッピングするカラムを使って生成したインデックスの名前を指定します。複数カラムを1つのインデックスにグループ化できます。単に、同じインデックス名を指定するだけです。


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

foreign-key 属性は、生成された外部キー制約の名前をオーバーライドするために使用できます。


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

多くのマッピング要素は、子 <column> 要素を記述できます。これは複数カラム型のマッピングには特に有用です:


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

default 属性はカラムのデフォルト値を指定します (マッピングしたクラスの新しいインスタンスを保存する前に、マッピングしたプロパティへ同じ値を代入すべきです)。


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

sql-type 属性で、デフォルトの Hibernate 型から SQL のデータ型へのマッピングをオーバーライドできます。


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

check 属性でチェック制約を指定することができます。


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


<comment> 要素で生成するスキーマにコメントを指定することができます。


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

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

これにより、生成した DDL に comment on tablecomment on column 文が書かれます。