JPA エンティティ マッピングの管理

Workshop には、EJB3 エンティティの編集や、永続性コンテキストを記述する persistence.xml ファイルの編集を行うためのグラフィカルなインタフェースが用意されています。

このトピックで説明するように、[エンティティ エディタ] を使用するとエンティティをグラフィカルに表示できます。[エンティティ エディタ] では、エンティティ間の関係の表示、データベースとの関係の編集、エンティティ Bean のソース コードへのアクセス、追加のマッピングの作成などの操作を行えます。

persistence.xml ファイルは、ファイルの構造や値に簡単にアクセスできるグラフィカルなインタフェースを使用して編集できます。編集機能の詳細については、「JPA プロパティのコンフィグレーション」を参照してください。

このトピックでは、以下に示す [エンティティ エディタ] の各操作について説明します。

[エンティティ エディタ] の起動

エンティティのプロパティの表示

プロパティやフィールド プロパティの編集

その他のプロパティ操作

関係のビューのフィルタ処理

新しいエンティティの作成

[エンティティ エディタ] の起動

[エンティティ エディタ] では、エンティティ Bean およびそのフィールドの両方のプロパティを編集できます。[エンティティ エディタ] を起動するには、[AppXplorer] で [エンティティ エディタ] をダブルクリックします。

[エンティティ エディタ] をダブルクリックしてビューを開く

エンティティのプロパティの表示

エディタ内のエンティティを選択するには、エンティティの名前 (ここでは「Customer」) をクリックします。エンティティを選択すると、そのプロパティが [スマート エディタ] に表示されます。エンティティのプロパティ (エンティティがどのデータベース テーブルと対話するかなど) はここで変更できます。エンティティを右クリックすると、ソース コードを表示したり、エンティティを削除したりできます。エンティティやフィールドのソース コードは、[エンティティ エディタ] でエンティティまたはフィールドをダブルクリックして表示することもできます。

[Java ソースを開く] をクリックしてエンティティのソースを表示する

プロパティやフィールド プロパティの編集

[エンティティ エディタ] 内のフィールドを選択するには、プロパティまたはフィールドの名前をクリックします。プロパティやフィールドのプロパティは [スマート エディタ] に表示されます。表示されるプロパティは、選択したプロパティの種類によって異なります。

エンティティ マッピングを作成する場合は、プロパティの種類として、基本、ID、多対一、一対一、一対多、多対多の 6 つの中から 1 つを選んで各プロパティを定義します。エンティティをデータベースから生成する場合は、特定のプロパティの種類を示す EJB 3.0 アノテーションが、生成されるソース コードに追加されます。[スマート エディタ] には、エンティティ Bean のコード内に指定されているアノテーションが表示されます。

以下では、アノテーションがどのように変換されて [スマート エディタ] に表示されるかについて簡単に説明します。なお、[スマート エディタ] に下線付きで表示されているラベルをクリックすると、対応する Java ソース コードまたは [DbXplorer] の項目を表示できます。

ここで説明するプロパティの種類は以下のとおりです。

基本プロパティ

一対多プロパティ

多対一プロパティ

一対一プロパティ

多対多プロパティ

ID プロパティ

基本プロパティ

基本プロパティは、そのままの状態でデータベースに永続化される標準的な値を扱います。つまり、非常に単純なプロパティです。[スマート エディタ] には、プロパティの名前と種類に加え、@Basic アノテーションに付随する @Column アノテーションの以下の値が表示されます。

値名 説明
[カラム名] プロパティがバインドされているカラムの名前。
[一意] SQL でいう UNIQUE な (一意の値しか持てない) カラムであることを示す場合は true。
[Null を許可] カラムに null 値を格納できることを示す場合は true
[長さ] カラムの長さ。
[挿入可能] カラムを SQL の INSERT 文の対象外とする場合は false
[更新可能] カラムを SQL の UPDATE 文の対象外とする場合は false

明示的に設定されなかった値はデフォルトのままとなります。デフォルト値は、ソース コードに記述する必要はなく、[スマート エディタ] ではグレーで表示されます。明示的に設定した値は、ソース コード内のアノテーションに属性値として記述されます。

Java ソースの例

@Column アノテーションは @Basic アノテーションに付随する

[エンティティ エディタ] と [スマート エディタ] の例

基本プロパティのプロパティを表示する

一対多プロパティ

一対多プロパティは、1 つの A エンティティが複数の B エンティティを参照し、複数の A エンティティが同じ B エンティティを参照することのない関係を示します。次の例では、1 つの Customer エンティティが複数の Order エンティティを参照していますが、Order エンティティが参照する Customer エンティティは 1 つに限定されています。[スマート エディタ] には、プロパティの名前と種類に加え、@OneToMany アノテーションの属性に対応する以下の値が表示されます。

値名 説明
[カスケード] このプロパティによって表されるエンティティのカスケード動作を示す列挙値の配列。
[型のフェッチ] フィールドの永続化されたデータを、エンティティ オブジェクトが永続性プロバイダから返される前にロードするか (FetchType.EAGER)、永続性プロバイダから返された後、プロパティがアクセスされたときにロードするか (FetchType.LAZY) を示す列挙値。
[マッピング基準] この双方向関係をマッピングする関連エンティティ内の多対一フィールドの名前。
[対象エンティティ] 関連付けられているエンティティ タイプのクラス。

[スマート エディタ] の [並べ替え] プロパティは、エンティティのソートに使用するカラム値を示す @OrderBy アノテーションを表します。

注意 : 一対多プロパティおよび多対一プロパティを生成すると、複数のエンティティ Bean が作成またはアノテーションされます。 たとえば、次に示す Customer エンティティの一対多 orders プロパティの場合、Order エンティティには多対一 customer プロパティが生成されます。このプロパティと対をなすプロパティの例については、「多対一プロパティ」を参照してください。

Java ソースの例

@OneToMany アノテーションには @OrderBy アノテーションを付随させることができる

[エンティティ エディタ] と [スマート エディタ] の例

一対多プロパティのプロパティを表示する

多対一プロパティ

多対一プロパティは、あるエンティティ A が 1 つのエンティティ B を参照し、それ以外の複数のエンティティ A も同じエンティティ B を参照する可能性がある関係を示します (この場合は A から B への多対一関係になります)。[スマート エディタ] には、プロパティの名前と種類に加え、@ManyToOne アノテーションの属性に対応する以下の値が表示されます。

値名 説明
[カスケード] このプロパティによって表されるエンティティのカスケード動作を示す列挙値の配列。
[型のフェッチ] フィールドの永続化されたデータを、エンティティ オブジェクトが永続性プロバイダから返される前にロードするか (FetchType.EAGER)、永続性プロバイダから返された後、プロパティがアクセスされたときにロードするか (FetchType.LAZY) を示す列挙値。

[スマート エディタ] に表示される以下のプロパティは、@JoinColumn アノテーションの属性に対応します。

値名 説明
[カラム名] プロパティがバインドされているカラムの名前。
[一意] SQL でいう UNIQUE な (一意の値しか持てない) カラムであることを示す場合は true
[Null を許可] カラムに null 値を格納できることを示す場合は true
[挿入可能] カラムを SQL の INSERT 文の対象外とする場合は false
[更新可能] カラムを SQL の UPDATE 文の対象外とする場合は false
[参照先カラム] 結合先の主キー カラムの名前。

注意 : 一対多プロパティおよび多対一プロパティを生成すると、複数のエンティティ Bean が作成またはアノテーションされます。 たとえば、次に示す Orders エンティティの多対一 customer プロパティの場合、Customer エンティティには一対多 orders プロパティが生成されます。このプロパティと対をなすプロパティの例については、「一対多プロパティ」を参照してください。

Java ソースの例

@JoinColumn アノテーションは @ManyToOne アノテーションに付随する

[エンティティ エディタ] と [スマート エディタ] の例

多対一プロパティのプロパティを表示する

一対一プロパティ

一対一プロパティは、1 つのエンティティ A が 1 つのエンティティ B を参照し、それ以外のエンティティ A が同じエンティティ B を参照できない関係を示します (この場合は A と B の間の一対一関係になります)。

[スマート エディタ] で使用できるほとんどのプロパティは、多対一のプロパティと同じです。[マッピング基準] プロパティについては、一対多プロパティを参照してください。

Java ソースの例

[エンティティ エディタ] と [スマート エディタ] の例

多対多プロパティ

多対多プロパティは、あるエンティティ A が複数のエンティティ B を参照し、他の複数のエンティティ A も同じエンティティ B を参照する可能性がある関係を示します (この場合は A と B の間の多対多関係になります)。[スマート エディタ] には、プロパティの名前と種類に加え、@ManyToMany アノテーションの属性に対応する以下の値が表示されます。

値名 説明
[カスケード] このプロパティによって表されるエンティティのカスケード動作を示す列挙値の配列。
[型のフェッチ] フィールドの永続化されたデータを、エンティティ オブジェクトが永続性プロバイダから返される前にロードするか (FetchType.EAGER)、永続性プロバイダから返された後、プロパティがアクセスされたときにロードするか (FetchType.LAZY) を示す列挙値。
[対象エンティティ] 関連付けられているエンティティ タイプのクラス。
[マッピング基準] この双方向関係をマッピングする関連エンティティ内の多対多フィールドの名前。

[スマート エディタ] の [並べ替え] プロパティは、エンティティのソートに使用するカラム値を示す @OrderBy アノテーションを表します。

[スマート エディタ] には、@JoinTable アノテーション属性の以下の値も表示されます。

値名 説明
[結合テーブル] エンティティのデータベース テーブル。
[Join] 結合テーブルのレコードを、主テーブル内の所有行に関連付ける方法を示す結合カラムの配列 (@JoinColumns アノテーションで表現)。
[Join](逆結合用) 結合テーブルのレコードを、コレクションの要素を形成するレコードに関連付ける方法を示す結合カラムの配列 (@JoinColumns アノテーションで表現)。

Java ソースの例

@JoinColumn アノテーションは @ManyToMany アノテーションに付随する

[エンティティ エディタ] と [スマート エディタ] の例

多対多プロパティのプロパティを表示する

ID プロパティ

ID プロパティは、主キーなどの識別子を示します。すべてのエンティティ Bean では、インスタンスの永続 ID を形成する 1 つまたは複数のフィールドを宣言する必要があります。[スマート エディタ] には、プロパティの名前と種類に加え、@Id アノテーションの属性に対応する以下の値が表示されます。

値名 説明
[Generate] ID フィールドの値の自動生成方法を指定する列挙値。自動生成された値は、数値フィールドでのみ使用できる。このプロパティの値は、以下の定数を保持する GeneratorType 列挙体で定義する。
  • [NONE] : フィールドの値を自動的に生成しない。この値がデフォルトです。
  • [AUTO] : 生成された値をフィールドに割り当て、その詳細を EJB 永続性ベンダに残す。
  • [IDENTITY] : 挿入時にデータベースによって ID が割り当てられる。
  • [SEQUENCE] : データストア シーケンスを使用してフィールド値を生成する。
  • [TABLE] : シーケンス テーブルを使用してフィールド値を生成する。

[スマート エディタ] には、@Column アノテーションの属性に対応する以下の値も表示されます。

値名 説明
[カラム名] プロパティがバインドされているカラムの名前。
[Null を許可] カラムに null 値を格納できることを示す場合は true
[長さ] カラムの長さ。

Java ソースの例

[エンティティ エディタ] と [スマート エディタ] の例

その他のプロパティ操作

プロパティの値を編集するだけでなく、さまざまな情報を表示することもできます。プロパティ名をクリックするとエンティティのソース コードが、プロパティの種類をクリックするとその種類に関する情報が、カラム名をクリックするとデータベース カラムのデータベース ダイアグラムがそれぞれ表示されます。フィールドを右クリックすると、そのソース コードを表示したり、マッピングを解除したり、エンティティ自体を削除したりできます。

[Unmap Property] をクリックすると、選択したプロパティのマッピングが削除される

関係のビューのフィルタ処理

[フィルタ] ドロップダウンからフィルタを選択すると、[エンティティ エディタ] に表示される関係線の数を減らすことができます。この機能は、数多くのエンティティが複雑に関係している場合に便利です。

フィルタの横のチェックをはずして、選択した種類の関係のみが表示されるようにする

新しいエンティティの作成

新しいエンティティ マッピングを作成するには、[エンティティ エディタ] の右上のアイコンをクリックします。これらのアイコンをクリックすると、エンティティ マッピングを生成するためのウィザードが起動します。これらのウィザードの詳細については、「JPA マッピングのスキーマからの作成」および「JPA の既存クラスのアノテーション」を参照してください。

[スキーマからの新しいエンティティ] をクリックして、データベースから新しい EJB3 マッピングを作成する       [Java クラスからの新しいエンティティ] をクリックして、既存のクラスをアノテーションすることで新しいマッピングを作成する

関連する概念

JPA マッピングの生成


さらにヘルプが必要ですか。質問は Workshop ニュース グループまでお寄せください。