>
8. エンティティ エディタを使用して永続性エンティティを管理する
BEA Workshop ORM Workbench には、Hibernate エンティティ間の関係を表示、作成、および管理する機能があります。[エンティティ エディタ] にはすべてのエンティティ関係がまとめて表示され、エンティティ プロパティを変更できるほか、オブジェクト モデル、Hibernate マッピング、データベース スキーマ レイヤの間を簡単にナビゲーションできます。
8.1. エンティティ エディタを使用してエンティティ関係ダイアグラムを表示し、エディタの機能を確認する
上でも述べたとおり、[エンティティ エディタ] にはプロジェクト内に定義されているエンティティ間の関係ダイアグラムが表示されます。
- [AppXplorer] で、[Hibernate コンフィグレーション] ブランチを展開します。Hibernate コンフィグレーション ファイルに定義されたエンティティに基づいて、[エンティティ] ブランチにエンティティの一覧が表示されます。
![](images/img70.JPG)
- [Hibernate コンフィグレーション] の下の [エンティティ エディタ] をダブルクリックすると、すべてのエンティティとそのプロパティにアクセスできます。
![](images/img71.JPG)
- [Hibernate エンティティ エディタ] に、Web アプリケーションで定義されているすべてのエンティティ関係が表示されます。各ボックスには、特定のエンティティ、そのプロパティ、および関係の性質を表すアイコンが表示されます。
- [Hibernate エンティティ エディタ] では、ダイアグラムの表示について [ズーム イン]、[ズーム アウト]、[自動調整] などの操作ができます。これを行うには、[エンティティ エディタ] を右クリックし、目的のアクションをポップアップ メニューから選択します。
![](images/img72.JPG)
- [Hibernate エンティティ エディタ] では、特定のエンティティに関するプロパティまたはプロパティ一覧がツールチップで表示されます。
![](images/img72_1.JPG)
- [Hibernate エンティティ エディタ] には、エンティティ間の関係をフィルタにより絞り込んで表示する機能もあります。複雑なエンティティ関係ダイアグラムを読み取ったり確認したりする場合は、この機能が非常に役立ちます。
![](images/img79.JPG)
- [フィルタ] ボタンをクリックし、[多対 1] および [1 対多] オプションを選択すると、エンティティ間の関係のうち該当するものがフィルタ表示されます。
![](images/img80.JPG)
- フィルタをリセットします。
- エンティティの確認は、AppXRay を使用して行うこともできます。[Hibernate コンフィグレーション] の [エンティティ] の下に表示される Product エンティティを右クリックし、[AppXRay の依存関係の表示] を選択します。
![](images/img80_1.JPG)
- これにより [AppXaminer] ビューが開き、依存関係ダイアグラムが表示されます。
![](images/img80_2.JPG)
8.2. スマート エディタを使用して Hibernate 永続性エンティティのプロパティを編集する
[プロパティ] ビューの [スマート エディタ] を使用すると、一部のオブジェクトについて、標準プロパティを簡単に編集できます。
- [Hibernate エンティティ エディタ] で Product エンティティを選択すると、Product エンティティの Hibernate マッピング ファイル (Product.hbm.xml) で定義されているプロパティが [スマート エディタ] に表示されます。
![](images/img73.JPG)
- 選択した各エンティティについて、関連する JavaBean クラス、永続性の実現方法、およびデータベース アクセス情報を編集できます。いずれの情報を編集する場合にも、テキスト ボックスに直接入力する方法と、
アイコンをクリックして指定可能なオプションの一覧から選択する方法があります。
![](images/img74.JPG)
- [Hibernate エンティティ エディタ] で、Product エンティティの name プロパティを選択します。name プロパティのプロパティが [スマート エディタ] に表示されます。プロパティの内容を確認します。
![](images/img75.JPG)
- [スマート エディタ] で、以下の操作を実行し、name プロパティの [長さ] プロパティを変更します。
- [Null 以外] オプションのチェック ボックスを選択します。
- [長さ] の値を「100」から「150」に変更します。
![](images/img76.JPG)
- 〔Ctrl〕+〔S〕を押して作業を保存します。
- com.bean.beans パッケージ内にある Hibernate マッピング ファイル Product.hbm.xml を開き、Product エンティティの name プロパティに対する変更が Hibernate マッピング ファイル Product.hbm.xml に反映されていることを確認します。
![](images/img77.JPG)
- すでに述べたとおり、[スマート エディタ] ではオブジェクトの標準プロパティのセットを簡単に編集できます。[プロパティ シート] エディタに切り替えれば、すべてのプロパティを表示 (編集) することもできます。
![](images/img78.JPG)
8.3. Customer エンティティと Contact エンティティに新しいプロパティを追加する
[Hibernate エンティティ エディタ] には、プロジェクト内のエンティティ関係を表示し、既存のエンティティのコンフィグレーションを簡単に更新できる機能だけでなく、特定のエンティティに新しいプロパティを定義する作業を支援するウィザードも用意されています。
この手順では、Customer エンティティと Contact エンティティの間に、新しい 1 対多の双方向の関連を定義します。
Contact エンティティには Customer 型の新しいプロパティを追加し、Customer エンティティには、Contacts のコレクションを保持するための新しいセット プロパティを追加します。これにより、Customer エンティティと Contact エンティティの間に 1 対多の双方向の関連を定義できます。
- Contact と Customer の間に多対 1 の関係を定義するための新しいプロパティを Contact エンティティに追加するには、[Hibernate エンティティ エディタ] で、Contact エンティティを右クリックし、[New Many-to-one...] を選択します。
![](images/img81.JPG)
- [Many to One Tag] ダイアログで、以下のようにプロパティ名として「customer」と入力し、Java クラスとして com.bea.beans.Customer を、データベース カラムとして CONTACT テーブルの CUSTOMERID を指定して、[OK] をクリックします。
![](images/img82.JPG)
- マッピング ファイル Contact.hbm.xml に新しいコードが追加され、その内容を反映して [エンティティ エディタ] の表示が更新されます。Contact エンティティと Customer エンティティの間に、多対 1 の一方向の関連が定義されたことがわかります。
![](images/img83.JPG)
- 〔Ctrl〕+〔S〕を押して作業を保存します。
- Customer エンティティを右クリックし、[New Set...] を選択して、Customer エンティティに新しい java.util.Set プロパティを追加します。この Set プロパティには、特定の顧客に対する連絡先の一覧が格納されます。
![](images/img84.JPG)
- [コレクション マッピング] ウィザードで、コレクション プロパティ名として「contacts」と入力し、その他のコンフィグレーション パラメータを以下のとおり設定して、[次へ] をクリックします。
![](images/img85.JPG)
- コレクション プロパティ名として「contacts」を指定し、コレクションの格納対象としてエンティティ クラス com.bea.beans.Contact を選択します。また、CUSTOMER テーブルとの結合カラムとして、CONTACT テーブルの CUSTOMERID カラムを指定します。
![](images/img86.JPG)
- [完了] をクリックします。
- マッピング ファイル Customer.hbm.xml に新しいコードが追加され、その内容を反映して [エンティティ エディタ] の表示が更新されます。Contact エンティティと Customer エンティティの間に、多対 1 の双方向の関連が定義されたことがわかります。
![](images/img87.JPG)
- 〔Ctrl〕+〔S〕を押して作業を保存します。
- [問題] ビューに 2 件の警告が表示されます。これは、Customer.hbm.xml ファイルと Contact.hbm.xml ファイルにプロパティを追加し、マッピングを定義したにもかかわらず、それに対応するプロパティがソース コードで定義されていないことを指摘する警告です。
![](images/img88.JPG)
- [Hibernate エンティティ エディタ] で、Contact エンティティを右クリックし、[Java ソースを開く] を選択します。これにより、com.bea.beans.Contact.java ファイルが開きます。または Contact.java ファイルをダブルクリックして開くこともできます。
![](images/img89.JPG)
- Contact クラスに、Customer 型の customer プロパティと、これに対応するゲッターおよびセッター メソッドを追加します。
private Customer customer; public Customer getCustomer( ) { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } |
- Contact クラスを保存します。
- Java ソース ファイルを開くには、[Hibernate エンティティ エディタ] でエンティティをダブルクリックする方法もあります。[Hibernate エンティティ エディタ] で Customer エンティティをダブルクリックし、com.bea.beans.Customer.java ファイルを開きます。Customer クラスに、java.util.Set 型の contacts プロパティと、これに対応するゲッターおよびセッター メソッドを追加します。
private Set contacts; public void setContacts(Set contacts) { this.contacts = contacts; } public Set getContacts( ) { return contacts; } |
- Customer クラスを保存します。
- 警告が表示されなくなったことを確認します。
8.4. 特定のマッピング定義へとナビゲーションする
ここまでは、エンティティの表示と管理に関する [Hibernate エンティティ エディタ] の機能を説明してきました。次の手順では、特定のマッピング定義へとナビゲーションする方法について説明します。また、[Hibernate マッピング] エディタの機能を確認し、エディタが備えている検証およびコード補完機能について説明します。
- [Hibernate エンティティ エディタ] で、OrderData エンティティを右クリックし、[マッピング ソースを開く] を選択すると、このエンティティに対する Hibernate マッピング ファイルへとナビゲーションできます。
![](images/img90.JPG)
- ORM Workbench は、Hibernate マッピング エディタを備えています。これは Hibernate マッピング コンフィグレーション ファイルの編集に使用するフォームとソース エディタを組み合わせたもので、現在のプロパティをフォームで管理することや、新しい内容をウィザードで簡単に作成することができます。
![](images/img91.JPG)
- [Hibernate マッピング] エディタでは、[Java クラス] のハイパーリンクによる JavaBean へのナビゲーションと、[スキーマ] へのハイパーリンクによるデータベース スキーマへのナビゲーション (スキーマが定義されている場合) ができます。また、[テーブル] では、DbXaminer を使用して該当するコンポーネントにナビゲーションできます。
- [Hibernate マッピング] フォーム エディタでいずれかのプロパティを選択すると、対応するコードがソース エディタ内で強調表示されます。
![](images/img92.JPG)
- エンティティの関係の管理においては、関連付けられている ORM レイヤ間の依存関係が AppXRay によって分析され、検証機能とコード補完機能 (〔Ctrl〕+ スペース キー) が提供されます。ソース コンフィグレーションで、many-to-one 要素の name 属性の値を「customer_NEW」に変更します。
![](images/img93.JPG)
- 警告アイコンと、「customer_NEW」はOrderData エンティティに定義されていないことを示すメッセージが表示されます。many-to-one 要素の name 属性の値を「customer」に戻します。マッピング ファイルを保存します。
- many-to-one 要素の下にある column 要素の name 属性にカーソルを移動し、〔Ctrl〕+ スペース キーを押します。AppXRay のコード補完機能により、データベース テーブルに定義されている指定可能なカラムの一覧が表示されます。
![](images/img94.JPG)
チュートリアルの前後の手順に移動するには、次の矢印をクリックしてください。