Hibernate.orgCommunity Documentation
Hibernate を使ったラウンドトリップエンジニアリングは、 Eclipse プラグインやコマンドラインツール、もちろん Ant タスクを使うことで可能です。
Hibernate Tools は現在、既存データベースのリバースエンジニアリングの Ant タスクに加えて、 Eclipse IDE のプラグインを含みます:
マッピングエディタ: Hibernate の XML マッピングファイル用のエディタで、自動補完と構文強調表示をサポートしています。クラス名やプロパティ/フィールド名に対する自動補完もサポートし、通常の XML エディタよりも強力です。
Console: コンソールはエクリプスの新しいビューです。コンソールコンフィギュレーションのツリーオーバービューに加えて、永続クラスとその関連の相互作用ビューも得られます。データベースに HQL を実行し、結果を直接エクリプス上で見ることができます。
開発ウィザード Hibernate の Eclipse ツールはいくつかのウィザードを提供します。ウィザードを使って Hibernate の設定ファイル (cfg.xml) をすばやく生成したり、既存のデータベーススキーマを POJO のソースファイルと Hibernate のマッピングファイルへと、完全にリバースエンジニアリングすることができます。リバースエンジニアリングウィザードはカスタマイズ可能なテンプレートをサポートします。
より詳しい情報は Hibernate Tools パッケージとそのドキュメントを参照してください。
しかし、 Hibernate のメインパッケージは SchemaExport 、別名 hbm2ddl
も含みます(Hibernate 「内」でオンザフライで使用できます)。
DDL は Hibernate ユーティリティによりマッピングファイルから生成することができます。生成されたスキーマはエンティティやコレクションのテーブルに対する参照整合性制約 (主キーと外部キー) を含みます。テーブルとシーケンスはマッピングする識別子ジェネレータに対して生成されます。
DDL はベンダー依存なので、このツールを使うときは、 hibernate.dialect
プロパティで SQL の 方言
を指定 しなければなりません 。
まず、生成されるスキーマを改善するように、マッピングファイルをカスタマイズしてください。
多くの Hibernate のマッピング要素では、オプションの length
、 precision
、 scale
という名の属性を定義しています。この属性でカラムの長さ、精度、スケールを設定することができます。
<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.
表22.1 要約
属性 | 値 | 説明 |
---|---|---|
length | 数値 | カラムの長さ |
precision | 数値 | カラムの DECIMAL 型の精度(precision) |
scale | 数値 | カラムの DECIMAL 型のスケール(scale) |
not-null | true|false | カラムが null 値を取らないことを指定します |
unique | true|false | カラムがユニーク制約を持つことを指定します |
index | index_name | (複数カラムの)インデックスの名前を指定します |
unique-key | unique_key_name | 複数カラムのユニーク制約の名前を指定します |
foreign-key | foreign_key_name | <one-to-one> 、 <many-to-one> 、 <key> 、 または <many-to-many> マッピングエレメントのために、関連に対して生成された外部キー制約の名前を指定します。 inverse="true" 側は SchemaExport によって考慮されないことに注意してください。 |
sql-type | SQL column type | デフォルトのカラム型をオーバーライドします ( <column> 要素の属性に限る) |
default | SQL 式 | カラムのデフォルト値を指定します |
check | SQL 式 | カラムかテーブルに SQL のチェック制約を作成します |
<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 table
や comment on column
文が書かれます。
SchemaExport
は標準出力に対して DDL スクリプトを書き出し、 DDL 文を実行したりもします。
The following table displays the SchemaExport
command line options
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport
options mapping_files
表22.2 SchemaExport
のコマンドラインオプション
オプション | 説明 |
---|---|
--quiet | 標準出力にスクリプトを出力しません |
--drop | テーブルの削除だけを行います |
--create | テーブルの生成のみを行います |
--text | データベースにエクスポートしません |
--output=my_schema.ddl | DDL スクリプトをファイルに出力します |
--naming=eg.MyNamingStrategy | NamingStrategy を選択 |
--config=hibernate.cfg.xml | XML ファイルから Hibernate の定義情報を読み込みます |
--properties=hibernate.properties | ファイルからデータベースのプロパティを読み込みます |
--format | スクリプト内に生成する SQL を読みやすいようにフォーマットします |
--delimiter=; | スクリプトの行区切り文字を設定します |
アプリケーションに SchemaExport
を組み込むこともできます:
Configuration cfg = ....;
new SchemaExport(cfg).create(false, true);
次のように、データベースのプロパティを指定することができます。
-D
<property> を使って、システムプロパティとして
hibernate.properties
ファイル内で
--properties
を使って指定したプロパティファイル内で
必要なプロパティは以下のものです:
表22.3 SchemaExport コネクションプロパティ
プロパティ名 | 説明 |
---|---|
hibernate.connection.driver_class | jdbc のドライバークラス |
hibernate.connection.url | jdbc の url |
hibernate.connection.username | データベースのユーザー |
hibernate.connection.password | ユーザーパスワード |
hibernate.dialect | データベース方言 |
Ant のビルドスクリプトから SchemaExport
を呼び出すことができます:
<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
>
SchemaUpdate
ツールは既存のスキーマをインクリメンタルに更新します。 SchemaUpdate
は JDBC のメタデータ API に強く依存します。そのため、すべての JDBC ドライバでうまくいくとは限らないことに注意してください。
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaUpdate
options mapping_files
表22.4 SchemaUpdate
のコマンドラインオプション
オプション | 説明 |
---|---|
--quiet | 標準出力にスクリプトを出力しません |
--text | データベースにスクリプトをエクスポートしません |
--naming=eg.MyNamingStrategy | NamingStrategy を選択 |
--properties=hibernate.properties | ファイルからデータベースのプロパティを読み込みます |
--config=hibernate.cfg.xml | .cfg.xml ファイルを指定 |
アプリケーションに SchemaUpdate
を組み込むことができます:
Configuration cfg = ....;
new SchemaUpdate(cfg).execute(false);
Ant スクリプトから SchemaUpdate
を呼び出すことができます:
<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
>
SchemaValidator
ツールは、既存のデータベーススキーマと作成したマッピングドキュメントが「一致する」ことを検証します。 SchemaValidator
は JDBC のメタデータ API に強く依存することに注意してください。そのため、すべての JDBC ドライバーで作動するものではありません。このツールはテスト時に非常に有用です。
java -cp
hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaValidator
options mapping_files
The following table displays the SchemaValidator
command line options:
表22.5 SchemaValidator
のコマンドラインオプション
オプション | 説明 |
---|---|
--naming=eg.MyNamingStrategy | NamingStrategy を選択 |
--properties=hibernate.properties | ファイルからデータベースのプロパティを読み込みます |
--config=hibernate.cfg.xml | .cfg.xml ファイルを指定 |
SchemaValidator
をアプリケーションに組み込むことが出来ます:
Configuration cfg = ....;
new SchemaValidator(cfg).validate();
Ant スクリプトから SchemaValidator
を呼び出せます:
<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
>
製作著作 © 2004 Red Hat, Inc.