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


Hibernate を使ったラウンドトリップエンジニアリングは、Eclipse プラグインやコマンドラインツール、Ant タスクを使うことで可能です。
Hibernate Tools は現在、既存データベースのリバースエンジニアリングの Ant タスクに加えて、Eclipse IDE のプラグインを含みます:
  • マッピングエディタ: Hibernate の XML マッピングファイル用のエディタで、自動補完と構文強調表示をサポートしています。クラス名やプロパティ/フィールド名に対する自動補完もサポートし、通常の XML エディタよりも強力です。
  • Console: コンソールはEclipseの新しいビューです。コンソール構成のツリーの全体図に加えて、永続クラスとその関連の相互作用ビューも得られます。データベースに HQL を実行し、結果を直接Eclipse上で見ることができます。
  • 開発ウィザード Hibernate の Eclipse ツールはいくつかのウィザードを提供します。ウィザードを使って Hibernate の設定ファイル (cfg.xml) をすばやく生成し、あるいは、既存のデータベーススキーマを POJO のソースファイルと Hibernate のマッピングファイルへと、完全にリバースエンジニアリングすることができます。リバースエンジニアリングウィザードはカスタマイズ可能なテンプレートをサポートします。
より詳しい情報は Hibernate Tools パッケージドキュメントを参照してください。
しかし、 Hibernate のメインパッケージは SchemaExport 、別名 hbm2ddl という統合ツールも同梱しています。Hibernate 「内」でも使用できます。

21.1. スキーマの自動生成

DDL は Hibernate ユーティリティによりマッピングファイルから生成することができます。生成されたスキーマはエンティティやコレクションのテーブルに対する参照整合性制約、主キー、外部キーを含みます。テーブルとシーケンスはマッピングされた識別子ジェネレータに対しても生成されます。
DDL は非常にベンダーに依存しており、このツールを使うときは、hibernate.dialect プロパティで SQL の 方言 を指定 しなければなりません
まず、生成されるスキーマを改善するように、マッピングファイルをカスタマイズしてください。次の章でスキーマのカスタマイズについて説明します。

21.1.1. スキーマのカスタマイズ

多くの 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 属性は、カラムを一意のキー制約1つにグループ化して使われます。現在、 unique-key 属性で指定された値は制約の指定には 使われず 、マッピングファイルでカラムをグループ化することにのみ使われます。
<many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/>
<property name="employeeId" unique-key="OrgEmployee"/>
index 属性は、1つ以上のマッピングされたカラムを使って生成したインデックスの名前を指定します。複数カラムを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>
以下のテーブルにて、これらのオプション属性についてまとめています。
Expand
表21.1 要約
属性説明
length数値カラムの長さ
precision数値カラムの DECIMAL 型の精度(precision)
scale数値カラムの DECIMAL 型のスケール(scale)
not-nulltrue|falseカラムが null 値を取らないことを指定します。
uniquetrue|falseカラムがユニーク制約を持つことを指定します
indexindex_name(複数カラムの)インデックスの名前を指定します
unique-keyunique_key_name複数カラムのユニーク制約の名前を指定します
foreign-keyforeign_key_name<one-to-one><many-to-one><key>、 または <many-to-many> マッピングエレメントのために、関連に対して生成された外部キー制約の名前を指定します。 inverse="true" 側は SchemaExport によって考慮されないことに注意してください。
sql-typeSQL column typeデフォルトのカラム型をオーバーライドします ( <column> 要素の属性に限る)
defaultSQL 式カラムのデフォルト値を指定します
checkSQL 式カラムかテーブルに 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 tablecomment on column 文が書かれます。

21.1.2. ツールの実行

SchemaExport は標準出力に対して DDL スクリプトを書き出し、 DDL 文を実行したりもします。
以下の表で、SchemaExport のコマンドラインオプションを示しています。
java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport options mapping_files
Expand
表21.2 SchemaExport のコマンドラインオプション
オプション説明
--quiet標準出力(stdout)にスクリプトを出力しません
--dropテーブルの削除だけを行います
--createテーブルの生成のみを行います
--textデータベースにエクスポートしません
--output=my_schema.ddlDDL スクリプトをファイルに出力します
--naming=eg.MyNamingStrategyNamingStrategy を選択
--config=hibernate.cfg.xmlXML ファイルから Hibernate の定義情報を読み込みます
--properties=hibernate.propertiesファイルからデータベースのプロパティを読み込みます
--formatスクリプト内に生成する SQL を読みやすいようにフォーマットします
--delimiter=;スクリプトの行区切り文字を設定します
アプリケーションに SchemaExport を組み込むこともできます:
Configuration cfg = ....;
new SchemaExport(cfg).create(false, true);

21.1.3. プロパティ

データベースのプロパティを指定することができます:
  • -D<property> を使って、システムプロパティとして
  • hibernate.properties ファイル内で
  • --properties を使って指定したプロパティファイル内で
必要なプロパティは以下のものです:
Expand
表21.3 SchemaExport コネクションプロパティ
プロパティ名説明
hibernate.connection.driver_classjdbc のドライバークラス
hibernate.connection.urljdbc の url
hibernate.connection.usernameデータベースのユーザー
hibernate.connection.passwordユーザーパスワード
hibernate.dialectデータベース方言

21.1.4. Ant の使用

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>

21.1.5. インクリメンタルなスキーマ更新

SchemaUpdate ツールは既存のスキーマを「インクリメンタル」に更新します。SchemaUpdate は JDBC のメタデータ API に依存します。そのため、すべての JDBC ドライバで正常に機能するとは限りません。
java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaUpdate options mapping_files
Expand
表21.4 SchemaUpdate のコマンドラインオプション
オプション説明
--quiet標準出力(stdout)にスクリプトを出力しません
--textデータベースにスクリプトをエクスポートしません
--naming=eg.MyNamingStrategyNamingStrategy を選択
--properties=hibernate.propertiesファイルからデータベースのプロパティを読み込みます
--config=hibernate.cfg.xml.cfg.xml ファイルを指定
アプリケーションに SchemaUpdate を組み込むことができます:
Configuration cfg = ....;
new SchemaUpdate(cfg).execute(false);

21.1.6. インクリメンタルなスキーマ更新に対する Ant の使用

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>

21.1.7. スキーマバリデーション

SchemaValidator ツールは、既存のデータベーススキーマとマッピングドキュメントが「一致する」ことを検証します。 SchemaValidator は JDBC のメタデータ API に強く依存します。そのため、すべての JDBC ドライバーで作動するものではありません。このツールはテスト時に非常に有用です。
java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaValidator options mapping_files
以下の表で、SchemaValidator のコマンドラインオプションを示しています。
Expand
表21.5 SchemaValidator のコマンドラインオプション
オプション説明
--naming=eg.MyNamingStrategyNamingStrategy を選択
--properties=hibernate.propertiesファイルからデータベースのプロパティを読み込みます
--config=hibernate.cfg.xml.cfg.xml ファイルを指定
SchemaValidator をアプリケーションに組み込むことが出来ます:
Configuration cfg = ....;
new SchemaValidator(cfg).validate();

21.1.8. スキーマのバリデーションに Ant を使用

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>
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る