8. [エンティティ エディタ] を使用して永続性エンティティを管理する
Workshop では、Hibernate エンティティの関係を表示、作成、および管理できます。[エンティティ エディタ] にはすべてのエンティティ関係がまとめて表示され、エンティティ プロパティを変更できるほか、オブジェクト モデル、Hibernate マッピング、データベース スキーマ レイヤの間を簡単に移動できます。
この手順のタスクは以下のとおりです。
[エンティティ エディタ] を使用してエンティティ関係ダイアグラムを表示する
上でも述べたとおり、[エンティティ エディタ] にはプロジェクト内に定義されているエンティティ間のエンティティ関係ダイアグラムが表示されます。
- [AppXplorer] ビューで、[workshop-jpa-tutorial|web (Web アプリケーション ルート)|Hibernate コンフィグレーション] ノードを展開します。Hibernate コンフィグレーション ファイルに定義されたエンティティに基づいて、[エンティティ] ブランチの下にエンティティのリストが表示されます。
- [Hibernate コンフィグレーション|エンティティ エディタ] をダブルクリックして、すべてのエンティティとそのプロパティにアクセスします。
[Hibernate エンティティ エディタ] に、Web アプリケーションで定義されているすべてのエンティティ関係が表示されます。各ボックスには、特定のエンティティ、そのプロパティ、および関係の性質を表すアイコンが表示されます。
- [Hibernate エンティティ エディタ] では、ダイアグラムの [拡大]、[縮小]、[Auto Arrangement] などの操作ができます。[エンティティ エディタ] を右クリックし、ポップアップ メニューから任意のアクションを選択します。
- エンティティの上にカーソルを置くとツールチップの形式でプロパティが表示されます。
- [Hibernate エンティティ エディタ] には、エンティティ間の関係をフィルタで絞り込む機能もあります。この機能は、複雑なエンティティ関係ダイアグラムを理解したり確認したりするのに役立ちます。
[フィルタ] ボタンをクリックし、[多対 1] および [1 対多] オプションの選択を解除すると、これらのエンティティ間の関係がフィルタされます。
![](img/img80.jpg)
- フィルタをリセットします。
- [AppXRay] ビューを使用して、エンティティを確認することもできます。[Hibernate コンフィグレーション|エンティティ] の下の Product エンティティを右クリックして、[AppXRay の依存関係の表示] を選択します。
![](img/img80_1.jpg)
[AppXaminer] ビューが開き、依存関係ダイアグラムが表示されます。
![](img/img80_2.jpg)
[スマート エディタ] を使用して Hibernate 永続性エンティティのプロパティを編集する
[プロパティ] ビューの [スマート エディタ] を使用すると、一部のオブジェクトについて、標準プロパティを簡単に編集できます。
- すべてのエンティティとそのプロパティにアクセスするには、[AppXplorer] ビューで、[workshop-hibernate-tutorial|web (Web アプリケーション ルート)|Hibernate コンフィグレーション|エンティティ エディタ] をダブルクリックします。
- [Hibernate エンティティ エディタ] ビューで Product エンティティを選択します。
- [プロパティ] ビューをクリックして、[スマート エディタ] を表示します。[スマート エディタ] には、Product エンティティの Hibernate マッピング ファイル (Product.hbm.xml) で定義されているプロパティが表示されます。
![](img/img73.jpg)
- [Hibernate エンティティ エディタ] ビューで、Product エンティティの name プロパティを選択します。name プロパティのプロパティが [スマート エディタ] に表示されます。プロパティを確認します。
![](img/img75.jpg)
- [スマート エディタ] で、以下の操作を実行し、name プロパティの [長さ] プロパティを変更します。
- [Null 以外] オプションのチェック ボックスを選択します。
- [長さ] の値を 100 から 150 に変更します。
![](img/img76.jpg)
- [Hibernate エンティティ エディタ] ビュー内をクリックし、〔Ctrl〕+〔Shift〕+〔S〕を押して変更を保存します。
- [AppXplorer] ビューで [workshop-hibernate-tutorial|web/WEB-INF/src/java|com.bea.beans] ノードを開きます。
Product.hbm.xml ファイルを右クリックして、[開く|Workshop XML エディタ] を選択します。
Product エンティティの name プロパティに対する変更が Hibernate マッピング ファイル Product.hbm.xml に反映されていることを確認します。
![](img/img77.jpg)
Customer および Contact エンティティに新しいプロパティを追加する
[Hibernate エンティティ エディタ] には、プロジェクト内のエンティティ関係を表示し、既存のエンティティのコンフィグレーションを簡単に更新できる機能だけでなく、特定のエンティティに新しいプロパティを定義する作業を支援するウィザードも用意されています。
この手順では、Customer エンティティと Contact エンティティの間に、新しい 1 対多の双方向の関連付けを定義します。
Contact エンティティには Customer 型の新しいプロパティを追加し、Customer エンティティには Contacts のコレクションを保持するための新しいセット プロパティを追加します。これにより、Customer エンティティと Contact エンティティの間に 1 対多の双方向の関連付けを定義できます。
- Contact と Customer の間に多対 1 の関係を定義するための新しいプロパティを Contact エンティティに追加するには、[Hibernate エンティティ エディタ] ビューで、Contact エンティティを右クリックし、[新しい多対 1] を選択します。
![](img/img81.jpg)
- [多対 1 タグ] ダイアログで、[プロパティ名] フィールドに customer と入力します。
[Java Class] フィールドに、com.bea.beans.Customer と入力します。
[Column Name] フィールドに、CUSTOMERID と入力します。
[OK] をクリックします。
![](img/img82.jpg)
- マッピング ファイル Contact.hbm.xml に新しいコードが追加され、[エンティティ エディタ] が更新されて新しい内容が反映されます。Contact エンティティと Customer エンティティの間に、多対 1 の一方向の関連付けが定義されたことがわかります。
![](img/img83.jpg)
- 〔Ctrl〕+〔S〕を押して変更を保存します。
- Customer エンティティを右クリックし、[新しいセット...] を選択して、Customer エンティティに新しい java.util.Set プロパティを追加します。Set プロパティには、顧客の連絡先のリストが格納されます。
![](img/img84.jpg)
- [コレクション マッピング] ウィザードで、[プロパティ名] フィールドに contacts と入力します。
[次へ] をクリックします。
![](img/img85.jpg)
- [コレクション マッピング] ダイアログで、[Entity Class] フィールドに、com.bea.beans.Contact と入力します。
[Column Name] フィールドに、CUSTOMERID と入力します。
[Inverse] フィールドの横のチェック ボックスを選択します。
[終了] をクリックします。
![](img/img86.jpg)
- マッピング ファイル Customer.hbm.xml に新しいコードが追加され、[エンティティ エディタ] が更新されて新しい内容が反映されます。Contact エンティティと Customer エンティティの間に、多対 1 の双方向の関連付けが定義されたことがわかります。
![](img/img87.jpg)
- 〔Ctrl〕+〔S〕を押して変更内容を保存します。
- [問題] ビューに 2 つの警告が表示されます。これは、Customer.hbm.xml ファイルと Contact.hbm.xml ファイルにプロパティを追加し、マッピングを定義しましたが、対応するプロパティがソース コードで定義されていないためです。
![](img/img88.jpg)
- [Hibernate エンティティ エディタ] ビューで、Contact エンティティを右クリックし、[Java ソースを開く] を選択します。
com.bea.beans.Contact.java ファイルが開きます。または Contact.java ファイルをダブルクリックして開くこともできます。
![](img/img89.jpg)
- Contact クラスに、Customer 型の customer プロパティと、対応するゲッター/セッター メソッドを追加します。
private Customer customer;
public Customer getCustomer( ) {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
} |
- Contact クラスを保存します。
- [Hibernate エンティティ エディタ] で、Customer エンティティをダブルクリックして com.bea.beans.Customer.java ファイルを開きます。
- Customer クラスに以下のインポート文を追加します。
- Customer クラスに以下のコードを追加します。
private Set contacts;
public void setContacts(Set contacts) {
this.contacts = contacts;
}
public Set getContacts( ) {
return contacts;
} |
- Customer クラスを保存します。
- 警告が表示されなくなったことを確認します。
Hibernate マッピング エディタを使用して特定のマッピング定義へ移動する (省略可能)
ここまでは、エンティティの表示と管理に関する [Hibernate エンティティ エディタ] の機能を説明してきました。この手順では、特定のマッピング定義へ移動する方法について説明します。また、Hibernate マッピング エディタを確認し、エディタが備えている検証およびコード補完機能について説明します。
- [Hibernate エンティティ エディタ] ビューで、OrderData エンティティを右クリックし、[マッピング ソースを開く] を選択すると、Hibernate マッピング ファイル OrderData.hbm.xml に移動できます。
OrderData.hbm.xml ファイルが Hibernate マッピング エディタに表示されます。Hibernate マッピング エディタは、マッピング プロパティの整理に使用するフォーム エディタおよびソース エディタを組み合わせたもので、現在のプロパティをフォームで管理したり、新しい内容をウィザードで簡単に作成したりすることができます。
![](img/img91.jpg)
- Hibernate マッピング エディタでプロパティを選択すると、対応するコードがソース エディタで強調表示されます。
![](img/img92.jpg)
- ソース ペインで、customer のマッピングを
<many-to-one
name="customer"
class="com.bea.beans.Customer"
lazy="false"
>
から以下に変更します。
<many-to-one
name="customer_NEW"
class="com.bea.beans.Customer"
lazy="false"
>
警告アイコンと、customer_NEW フィールドが OrderData エンティティに定義されていないことを示すメッセージが表示されます。
many-to-one 要素の name 属性の値を customer に戻します。マッピング ファイルを保存します。
![](img/img93.jpg)
- (many-to-one 要素内の) column 要素の name 属性にカーソルを移動し、〔Ctrl〕+〔Space〕を押します。AppXRay のコード補完機能により、データベース テーブルに定義されている指定可能なカラムが表示されます。
![](img/img94.jpg)
チュートリアルを移動するには、矢印をクリックしてください。
さらにヘルプが必要ですか。質問は Workshop
ニュース グループまでお寄せください。