手順 6. O/R マッピングを生成する
Workshop は、Hibernate のような一般的な永続性サービスを利用するための、多彩で柔軟性のあるオブジェクト リレーショナル マッピング インタフェースを備えています。O/R マッピングは、開発手法に応じて以下の異なるメカニズムで生成できます。
- スキーマをリバース エンジニアリングしてオブジェクト リレーショナル マッピングを作成する
- オブジェクト モデルからマッピングを生成する
この手順では、両方のシナリオに従って O/R マッピングを生成します。この手順のタスクは以下のとおりです。
データベース スキーマからオブジェクト モデルとマッピング ファイルを作成する
この手順では、データベース スキーマをリバースエンジニアリングする方法によって、関連するオブジェクト モデルとマッピングを Workshop で自動生成します。
- [DbXplorer] ビュー内の空白部分で右クリックし、[Hibernate マッピングの生成...] を選択します。
![](img/img39.jpg)
- [Web アプリケーション] ダイアログで workshop-hibernate-tutorial を選択し、[OK] をクリックします。
![](img/img40.jpg)
- 以下に示す [Hibernate ORM の生成] ダイアログで、データベース テーブルを選択して、[次へ] をクリックします。
CONTACT データベース テーブルは選択しないでください。トップダウンの開発手法を理解できるように、このチュートリアルの後半で、CONTACT データベースを使用して Contact オブジェクト モデルから Hibernate マッピング ファイルを生成します。
![](img/img41.jpg)
- [テーブルの関連付け] ダイアログに、外部キー定義に基づいてデータベース スキーマから抽出されたエンティティ関係が表示されます。このダイアログでは、各テーブルの関連を選択し、編集パネルでオプションを変更することでそれらを編集できます。
LINEITEM と ORDER_DATA の間の関連を選択します。
1 番目の [プロパティ] フィールドの値を、「orderData」から「order」に変更します。
![](img/img43.jpg)
- LINEITEM と PRODUCT の間の関連を選択します。
[Generate a reference to a collection of Lineitem in Product] チェックボックスの選択を解除します。(LINEITEM と PRODUCT の間に、多対 1 の一方向の関係を定義する必要があるためです。)
![](img/img44.jpg)
- ORDER_DATA と CUSTOMER の間の関連付けを選択します。
2 番目の [プロパティ] フィールドの値を orderData から orders に変更します。
[次へ] はクリックしないでください。
![](img/img45.jpg)
CUSTOMER と CUSTOMERID の間に 1 対 1 の関連付けを新しく作成する
Workshop では、新しい関連付けを作成することもできます。2 つのテーブル間の単純な関連付け (1 対 1、1 対多、多対 1) と、中間テーブルを介した多対多の関連付けを作成できます。
- [新しい関連付けの作成] オプションをクリックし、新しい関連付けのプロパティを指定します。
![](img/img46_1.jpg)
- [新しい関連付けの作成] ダイアログで、[Table 1] ドロップダウンを使用して、[CUSTOMER] を選択します。
[Table 2] ドロップダウンを使用して、[CUSTOMERID] を選択します。
[次へ] をクリックします。
![](img/img46.jpg)
- [結合カラム] ダイアログで、テーブル間の結合カラムを指定します。
[CUSTOMER] テーブル ドロップダウンで、[CUSTOMERID] カラムを選択します。
[CUSTOMERID] テーブル ドロップダウンで、[CUSTOMERID] カラムを選択します。
[次へ] をクリックします。
![](img/img47.jpg)
- [1 対 1] を選択して、1 人の顧客と 1 つの顧客 ID が対応するようにします。
[完了] をクリックします。
![](img/img48.jpg)
- 新しい関連付け (茶色のボックス) はデータベース スキーマから抽出されたものではないため、Hibernate マッピング ファイルおよびオブジェクト モデル内にプログラムによって作成されます。
[Hibernate ORM の生成] ダイアログで [次へ] をクリックします。
![](img/img49.jpg)
- [デフォルト テーブルの生成] ダイアログの [キー ジェネレータ] ドロップダウンで、[increment] を選択します。
- [Java パッケージ] フィールドの横にある [参照] をクリックします。
[Java パッケージの選択] ダイアログで、[新しい Java パッケージ] をクリックします。
[新しい Java パッケージ] ダイアログの [名前] フィールドに com.bea.beans と入力して [終了] をクリックします。
![alt](img/6.1.jpg)
- [Java パッケージの選択] ダイアログで、[OK] をクリックします。
- [Hibernate ORM の生成] ダイアログで、[次へ] をクリックします。
![](img/img51.jpg)
- [テーブルとカラム] ダイアログで、生成されるマッピング ファイルと Bean クラスのテーブル マッピング名およびカラム マッピング名を定義します。デフォルトでは、Hibernate マッピング ファイルと JavaBean に、スキーマのテーブル名およびカラム名が使用されます。テーブルまたはカラムをポイントすると、データベース スキーマに定義されているテーブルおよびカラムのプロパティがツールチップに表示されます。
[次へ] をクリックします。
![](img/img52.jpg)
- [マッピングの生成] ダイアログでは、マッピング ファイルの拡張子を選択できます。ドメイン Java クラスを生成するかどうかや、Hibernate コンフィグレーション ファイル hibernate.cfg.xml を更新するかどうかも指定できます。
デフォルトを受け入れて [完了] をクリックします。
![](img/img53.jpg)
ORM 生成ウィザードで指定したプロパティに基づいて、すべての Hibernate マッピング ファイルと JavaBean が生成されます。
生成が完了すると、[AppXplorer] ビューを使用し、そのプロジェクトの [Hibernate コンフィグレーション] ブランチにある web (Web アプリケーション ルート) ディレクトリ内にエンティティが表示されます。
[Hibernate ORM の生成] ウィザードで指定したすべての設定は記録されており、次回同じデータベース接続でこのウィザードを使用するときに再利用できます。
Spring Bean を生成する
この時点で、必要に応じて Spring Bean と Spring コンフィグレーションを生成することができます。
このタスクには以下の作業があります。
生成したマッピングとクラスを確認する
- [AppXplorer] ビューで、[workshop-hibernate-tutorial|web|Hibernate コンフィグレーション|エンティティ] ノードを開きます。
- Workshop によって生成された一連の永続性エンティティを確認します。永続性エンティティは、hibernate.cfg.xml ファイルで指定された、拡張子 .hbm.xml を持つマッピング リソースに基づいて識別されます。
- オブジェクト モデルは、パッケージの [web/WEB-INF/src/java] ブランチに表示されます。
永続性クラスから Hibernate マッピング ファイルを作成する
この手順では、永続性 Java クラス Contact を作成し、Workshop を使用して、Contact オブジェクトの Hibernate マッピングを生成します。これにより、トップダウンの開発手法に従って作業を進めます。
- [AppXplorer] ビューで [workshop-hibernate-tutorial|web/WEB-INF/src/java|com.bea.beans] ノードを開きます。
- [com.bea.beans] を右クリックして [新規|クラス] を選択します。
- [新規 Java クラス] ダイアログで、java.io.Serializable インタフェースを実装する Java クラス Contact を作成します。([追加] をクリックして、java.io.Serializable インタフェースを追加します)。
![](img/img55.jpg)
- Contact クラスに以下のプライベート変数 (String 型) を追加します。注意 : ここでは、CONTACT データベース テーブル内のカラムにマップするプロパティを定義しています。
private String contactId;
private String address;
private String city;
private String phone; |
- 引数なしのコンストラクタを追加します。
public Contact( ) {
super( );
} |
- ソース ペイン内で右クリックし、[ソース|Getter および Setter の生成] を選択して、各プロパティのゲッター メソッドとセッター メソッドを追加します。[Getter および Setter の生成] ダイアログで、[すべて選択] をクリックして [OK] をクリックします。
- 以下のプロパティを追加します。
private static final long serialVersionUID = 1L;
|
- Set 内の Contact インスタンスを使用するために、equals( ) メソッドと hashCode( ) メソッドを追加します。
public boolean equals(Object other) {
if ( (this == other ) ) return true;
if ( !(other instanceof Contact) ) return false;
Contact castOther = (Contact) other;
if( this.getContactId( ).equals(castOther.getContactId(
)) ) {
return true;
} else {
return false;
}
}
public int hashCode() {
return this.getContactId( ).hashCode( );
} |
- Contact クラスを保存します。これで、CONTACT 永続性データのオブジェクト表現が作成できました。次に、Contact オブジェクトから Hibernate O/R マッピング ファイルを作成します。
- [AppXplorer] ビューで、workshop-hibernate-tutorial プロジェクトを右クリックして、[新規|その他] を選択します。[Hibernate] を展開し、[Java クラスからの Hibernate マッピング] を選択して [次へ] をクリックします。
![](img/img56.jpg)
- Java クラスの [参照] ボタンをクリックします。
[Choose Type] ダイアログで、Contact と入力し、com.bea.beans.Contact オブジェクトを選択して、[OK] をクリックします。
![](img/img57.jpg)
- [Hibernate マッピングの生成.] ダイアログで、[次へ] をクリックします。
![](img/img58.jpg)
- [クラス マッピングのプロパティ] ダイアログで、[次へ] をクリックします。
![](img/img59.jpg)
[Bean プロパティのマッピング] ダイアログでは、どの Bean プロパティをマッピングするかを選択できます。必要に応じて、プロパティを選択し、[編集] をクリックしてカラム マッピング情報を指定するか、[削除] ボタンをクリックして Hibernate マッピング ファイルからプロパティのマッピングを削除します。このチュートリアルでは、マッピング情報を変更する必要はありません。
- [終了] をクリックします。
Workshop により、Contact オブジェクトの情報に基づいて Hibernate O/R マッピングが生成され、CONTACT データベース テーブルにマッピングされます。
チュートリアルを移動するには、矢印をクリックしてください。
さらにヘルプが必要ですか。質問は Workshop
ニュース グループまでお寄せください。