Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


8.22.24 @JoinColumn

〈この項の構成〉

(1) 説明

エンティティクラス間の関連づけをする場合に,結合表のための外部キーカラムまたは外部キーカラムによって参照された,結合先テーブルのカラム名を指定するアノテーションです。必ず結合先テーブルのプライマリキーとなっているカラムを指定してください。

複数の外部キーカラムがある場合は@JoinColumnsを使用し,それぞれの関連に対して@JoinColumnを指定してください。なお,複数の@JoinColumnを指定した場合は,name属性およびreferencedColumnName属性をそれぞれのアノテーションで指定してください。

@JoinColumnを明示的に指定しない場合,関連を示す永続化プロパティまたは永続化フィールドに単体の外部キーカラムを指定しているように扱われます。また,@JoinColumnの各属性値にデフォルト値が適用されます。

また,一つのカラムがフィールドに対して行った変更と,カスケード操作の関連づけによる変更が同時に実施されたことによって,整合性が取れなくなる場合があります。このため,name属性およびreferencedColumnName属性に指定したカラムをエンティティのフィールドに定義する場合は,insertable属性およびupdatable属性をfalseに指定する必要があります。この指定によって,フィールドに対して行った変更だけがデータベースに反映されますが,カスケード操作の関連づけによる変更はデータベースに反映されません。

適用可能要素は,メソッドとフィールドです。

(2) 属性

@JoinColumnの属性の一覧を次の表に示します。

属性名

任意/必須

属性の説明

name

任意

対象テーブルを結合するために使用する外部キーカラム名を指定する属性です。

referencedColumnName

任意

name属性で指定した外部キーカラムによって参照された結合先テーブルのカラム名を指定する属性です。

unique

任意

プロパティがユニークキーであるかどうかを指定する属性です。

なお,この属性は,CJPAプロバイダでは対応していません。

nullable

任意

データベースのカラムにnull値を指定できるかどうかを指定する属性です。

なお,この属性は,CJPAプロバイダでは対応していません。

insertable

任意

@JoinColumnで指定したカラムをSQLのINSERT文に含むかどうか指定する属性です。

updatable

任意

@JoinColumnで指定したカラムをSQLのUPDATE文に含むかどうか指定する属性です。

columnDefinition

任意

CREATE文を出力する場合,外部カラムに追加する規約をDDLで記載する属性です。

なお,この属性は,CJPAプロバイダでは対応していません。

table

任意

外部キーカラムを含むテーブル名を指定する属性です。

CJPAプロバイダで対応する属性の詳細を次に示します。

(a) name属性

String

説明

対象テーブルを結合するために使用する外部キーカラム名を指定する属性です。

外部キーカラムは,エンティティのリレーションシップの種別ごとに存在する個所が異なります。エンティティのリレーションシップの種別ごとに外部キーカラムの存在個所を示します。

  • OneToOneリレーションシップまたはManyToOneリレーションシップの場合

    自エンティティのテーブル内

  • ManyToManyリレーションシップの場合

    @JoinTableの結合表内

なお,指定できる値は,データベースのカラム名の仕様に依存します。

デフォルト値
  • 自エンティティ内に単体の外部キーカラムが指定され,name要素の値に何も指定しない場合

    <自エンティティ内の関連プロパティまたはフィールドの名前>_<参照されるプライマリキー列の名前>

  • 参照している関連プロパティやフィールドがない場合(例:@JoinTableを使用している場合)

    <参照しているエンティティの名前>_<参照されるプライマリキー列の名前>

(b) referencedColumnName属性

String

説明

name属性で指定した外部キーカラムによって参照された結合先テーブルのカラム名を指定する属性です。

結合先テーブルのカラム名は次の個所に存在します。

  • リレーションシップのアノテーションを使った場合

    参照されるテーブル内

  • @JoinTableで使った場合

    所有者側エンティティのエンティティテーブル内

結合が逆結合の一部で定義される場合は,被所有者側のエンティティクラスのテーブル内になります。

なお,指定できるカラム名は,データベースの仕様に依存します。

デフォルト値

外部キーによって参照されるテーブルのプライマリキーのカラム名

単体の外部キーカラムが指定される場合は,デフォルトを適用します。

(c) insertable属性

boolean

説明

@JoinColumnで指定したカラムをSQLのINSERT文に含むかどうかを指定する属性です。指定できる値は,trueまたはfalseです。

それぞれの値の意味は次のとおりです。

true:@JoinColumnで指定したカラムをSQLのINSERT文に含みます。

false:@JoinColumnで指定したカラムをSQLのINSERT文に含みません。

デフォルト値

true

(d) updatable属性

boolean

説明

@JoinColumnで指定したカラムをSQLのUPDATE文に含むかどうかを指定する属性です。指定できる値は,trueまたはfalseです。

それぞれの値の意味は次のとおりです。

true:@JoinColumnで指定したカラムをSQLのUPDATE文に含みます。

false:@JoinColumnで指定したカラムをSQLのUPDATE文に含みません。

デフォルト値

true

(e) table属性

String

説明

外部キーカラムを含むテーブル名を指定する属性です。

指定できるテーブル名は,データベースの仕様に依存します。

デフォルト値

プライマリテーブル名