ページの先頭行へ戻る
Interstage Studio Java EEワークベンチユーザーズガイド

4.3.3 エンティティクラスを作成する

エンティティクラスを作成するには、新規 JPA エンティティウィザードを使用することで、@Entityアノテーションなどが設定されたクラスを生成することができます。

ポイント

データベースのテーブルからエンティティクラスを生成することもできます。
詳細は、"4.3.3.4 テーブルからエンティティクラスを生成する"を参照してください。

JPAパースペクティブを開く

はじめにJPAパースペクティブを開きます。

エンティティクラスの作成

エンティティクラスの作成は、新規ウィザードから[JPA] > [エンティティ]を選択し、ウィザードで作成します。ウィザードでの設定は、以下を参考にしてください。

アノテーション設定

[JPA構造]ビューをアクティブにして、作成したエンティティクラスを選択します。[JPA詳細]ビューの [タイプ]で表示されているマッピングタイプをクリックします。[マッピングタイプの選択]ダイアログボックスでマッピングタイプを選択すると、エンティティクラスにアノテーションが設定されます。
Entityは、継承や埋め込みなどを利用し複雑なデータ構成にも対応したものも作成できます。
詳細は、"4.3.3.1 データ構成を考慮してエンティティを作成する"を参照してください。

ポイント

Javaクラスをエンティティにする場合は、JPA構造ビューにJavaクラスが表示されないため、Javaソースに直接アノテーション定義を追加してください。

エンティティクラスとデータベースのマッピング

エンティティクラスとデータベースとをマッピングする場合は、[JPA詳細]ビューの[テーブル]グループにある[名前]コンボボックスで、データベースのテーブル名を指定します。クラス名と同じ名前のテーブルとマッピングする場合は、デフォルトのままでかまいません。

エンティティクラスのフィールドとデータベースのカラムもマッピングできます。エンティティクラスにフィールドを作成して、そのフィールドを[JPA構造]ビューで選択します。[JPA詳細]ビューの[カラム]グループにある[名前]コンボボックスで、データベースのテーブル名を指定します。フィールド名と同じ名前のカラムとマッピングする場合は、デフォルトのままでかまいません。

ポイント

プロジェクトに設定したデータベースに接続している場合は、[JPA詳細]ビューのコンボボックスにマッピングできる候補が一覧されます。

データベースとのマッピングは、単純なテーブルやカラムとの対応付け以外も行うことができます。
データベースとのマッピングの詳細は、"4.3.3.2 エンティティとデータベースをマッピングする"を参照してください。
また、Entity間の関係についてもデータベースの情報と絡めてマッピングすることができます。
詳細は、"4.3.3.3 エンティティ間の関係を定義する"を参照してください。

ポイント

データベースとのマッピングはアノテーションだけでなく、O/Rマッピングファイルでも行うことができます。複数の環境で使用する場合などアプリケーションの可搬性を高めたい場合は、O/Rマッピングファイルを利用してください。

4.3.3.1 データ構成を考慮してエンティティを作成する

エンティティはエンティティを継承して作成することができます。エンティティ以外にも共通の永続化項目を特殊なスーパークラスで管理し、それを継承して作成することもできます。そのスーパークラスを作成するには、@MappedSuperclassアノテーションを設定します。
継承してエンティティを作成した場合、継承している永続化項目の属性を上書きして変更することや、継承している各エンティティのデータベーステーブルへのマッピング方法を指定することができます。これらには、@AttributeOverrideアノテーションや@Inheritanceアノテーションを使用します。

また、関連する永続項目をまとめて特殊なクラスとして管理し、エンティティのフィールドの型として使用することで、エンティティに特殊なクラスを埋め込むこともできます。その特殊なクラスを作成するには、@Embeddableアノテーションを設定し、エンティティに埋め込む場合には@Embeddedもしくは@EmbeddedIdアノテーションをエンティティのフィールドに設定します。
埋め込みを行った場合、埋め込んだクラスの永続項目の属性を上書きして変更することもできます。

MappedSuperclassアノテーションの設定

[JPA構造]ビューでスーパークラスを選択します。[JPA詳細]ビューの[タイプ]で表示されているマッピングタイプをクリックします。[マッピングタイプの選択]ダイアログで"Mapped Superclass"を選択すると、@MappedSuperclassアノテーションが設定されます。

Javaクラスの場合は、クラスファイルをJavaエディタで開き、直接アノテーションを定義してください。

AttributeOverrideアノテーションの設定

[JPA構造]ビューでエンティティクラスを選択します。[JPA詳細]ビューの[属性の上書き]で、上書きしたい永続項目を選択し、属性の上書きを行います。

Inheritanceアノテーションの設定

[JPA構造]ビューで階層のルートのエンティティクラスを選択します。[JPA詳細]ビューの[継承]で、エンティティのデータベーステーブルへのマッピング方法を指定します。
設定については、以下を参考にしてください。

Embeddableアノテーションの設定

[JPA構造]ビューでJavaクラスを選択します。[JPA詳細]ビューの[タイプ]で表示されているマッピングタイプをクリックします。[マッピングタイプの選択]ダイアログで"Embeddable"を選択すると、@Embeddableアノテーションが設定されます。

Javaクラスの場合は、クラスファイルをJavaエディタで開き、直接アノテーションを定義してください。

EmbeddedもしくはEmbeddedIdアノテーションの設定

[JPA構造]ビューでエンティティクラスの@Embeddableアノテーションを設定したクラス型の永続項目を選択します。[JPA詳細]ビューの[属性]で表示されているマッピングタイプをクリックします。[マッピングタイプの選択]ダイアログで"Embedded"もしくは"Embedded Id"を選択すると、永続項目に@Embeddedアノテーションもしくは@EmbeddedIdアノテーションが設定されます。
"Embedded" を選択した場合、[JPA詳細]ビューの[属性の上書き]で、@Embeddableアノテーションを設定したクラスの属性を上書きして変更することができます。

4.3.3.2 エンティティとデータベースをマッピングする

エンティティとデータベーステーブルをマッピングするには、@Tableアノテーションを使用します。また、エンティティを1つ以上のデータベーステーブルとマッピングすることもでき、その場合には、@SecondaryTableアノテーションを使用します。

エンティティとテーブルをマッピングした場合には、永続項目とカラムは名前で対応付けられますが、永続項目単位にデータベースのカラムにマッピングすることもできます。また、主キーになる永続項目を宣言する必要があります。

マッピングするカラムの情報以外にも、データ読み込み(フェッチ)の方法を指定したり、型に関するオプションを指定したり、永続化しない項目やOptimistic Lockingに使用する項目を指定することもできます。

Tableアノテーションの設定

[JPA構造]ビューでエンティティクラスを選択します。[JPA詳細]ビューの[テーブル]で、テーブル名、カタログ、スキーマを指定します。

SecondaryTableアノテーションの設定

[JPA構造]ビューでエンティティクラスを選択します。[JPA詳細]ビューの[二次テーブル]で、主テーブル(@Tableアノテーションで指定したもの)以外のテーブルを追加します。

[主キー結合カラム]は、主テーブルの主キーと二次テーブルとして追加したテーブルのどのカラムを対応付けるかを指定します。

永続項目とカラムのマッピング

[JPA構造]ビューでエンティティクラスの永続項目を選択します。[JPA詳細]ビューの[カラム]で、カラム名、テーブルを指定します。
[挿入可能]、[更新可能]は、その永続項目に対応するカラムを挿入や更新対象とするかを指定する項目です。

主キーの設定

[JPA構造]ビューでエンティティクラスの主キーになる永続項目を選択します。[JPA詳細]ビューの[属性]で表示されているマッピングタイプで"Id"を選択します。すると、フィールドに@Idアノテーションが設定されます。

プログラム内で主キーの値を明示的に設定せずに、主キーの値を自動的に生成する場合には、上記の[JPA詳細]ビューの[主キーの生成]で行います。設定については、以下を参考にしてください。

この項目は、@GeneratedValue、@TableGenerator、@SequenceGeneratorアノテーションに相当します。

フェッチ方法の指定

[JPA構造]ビューで永続項目を選択している状態で、[JPA詳細]ビューの[フェッチ]でフェッチ方法の指定を行います。
設定については、以下を参考にしてください。

日時型に関するオプションの指定

永続項目の型が日時関連の場合には、Date(日付)、Time(時間)、Timestamp(日時)のどれに対応付けるかを指定できます。これには、@Temporalアノテーションを使用します。

@Temporalアノテーションを設定するには、[JPA構造]ビューで日時関連の型の永続項目を選択し、[JPA詳細]ビューの[日時型]でコンボボックスから対応付ける方法を選択します。

列挙型に関するオプションの指定

永続項目が列挙型の場合には、値をOrdinal(序数)とString(文字列)のどちらで扱うかを指定できます。これには、@Enumeratedアノテーションを使用します。

@Enumeratedアノテーションを設定するには、[JPA構造]ビューで列挙型の永続項目を選択し、[JPA詳細]ビューの[列挙型]でコンボボックスから扱い方を選択します。

巨大オブジェクト型に関するオプションの指定

永続項目の型が、データベースの巨大オブジェクト型(LOB)に対応付けられる型の場合に巨大オブジェクトとして扱うかを指定できます。これには、@Lobアノテーションを使用します。

@Lobアノテーションを設定するには、[JPA構造]ビューで巨大オブジェクト型に対応付けられる永続項目を選択し、[JPA詳細]ビューの[Lob]をチェックします。

永続化しない項目の指定

エンティティクラスに宣言されるフィールドやプロパティは、デフォルトで永続化対象として扱われてしまいます。永続化しない項目については、@Transientアノテーションを設定する必要があります。

@Transientアノテーションを設定するには、[JPA構造]ビューで永続化しない項目を選択し、[JPA詳細]ビューの[属性]で表示されているマッピングタイプで"Transient"を選択します。

Optimistic Lockingを適用する項目の指定

データを読み込んだ時と更新するときで値が変更されていないかをチェックするような排他方式をOptimistic Lockingといいます。この方式を適用する項目については、@Versionアノテーションを設定する必要があります。

@Versionアノテーションを設定するには、[JPA構造]ビューで項目を選択し、[JPA詳細]ビューの[属性]で表示されているマッピングタイプで"Version"を選択します。

4.3.3.3 エンティティ間の関係を定義する

エンティティ間の関係には、1対1、多対1、1対多、多対多の関係があります。関係には方向性もあり、どちらからも参照できる双方向と、片側からしか参照できない単方向があります。
エンティティ間の関係を定義するには、参照される側のEntity型やそのコレクション型のフィールドやプロパティをエンティティに定義し、関係の種別に合わせて@OneToOne、@ManyToOne、@OneToMany、@ManyToManyアノテーションを使用します。

1対1の関係もしくは多対1の関係を定義する

参照する側のエンティティに参照される側のEntity型のフィールドもしくはプロパティを追加します。[JPA構造]ビューで追加した項目を選択し、[JPA詳細]ビューの[属性]で表示されているマッピングタイプで"One to One"もしくは"Many to One"を選択し、関係の定義を行います。関係の定義については、以下を参考にしてください。

1対多の関係もしくは多対多の関係を定義する

参照する側のエンティティに参照される側のエンティティのコレクション型のフィールドもしくはプロパティを追加します。[JPA構造]ビューで追加した項目を選択し、[JPA詳細]ビューの[属性]で表示されているマッピングタイプで"One to Many"もしくは"Many to Many"を選択し、関係の定義を行います。
関係の定義については、以下を参考にしてください。(1対1もしくは多対1と同一のものは省略しています。)

4.3.3.4 テーブルからエンティティクラスを生成する

データベースの接続をプロジェクトに設定している場合は、以下の手順でデータベースのテーブルからエンティティクラスを生成することができます。

  1. [データソースエクスプローラ]ビューでプロジェクトに設定したデータベースに接続します。
    データベースに接続する詳細については、"6.3.1 データベースに接続する"を参照してください。

  2. プロジェクトを右クリックして、[JPAツール] > [Entityの生成]を選択します。

  3. 表示された[Entityの生成]ダイアログボックスで、テーブルを選択して、ソースフォルダやパッケージを入力します。