2.7.24 @JoinColumn

<この項の構成>
(1) 説明
(2) 属性

(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
説明
外部キーカラムを含むテーブル名を指定する属性です。
指定できるテーブル名は,データベースの仕様に依存します。
デフォルト値
プライマリテーブル名