8.22.24 @JoinColumn
(1) 説明
エンティティクラス間の関連づけをする場合に,結合表のための外部キーカラムまたは外部キーカラムによって参照された,結合先テーブルのカラム名を指定するアノテーションです。必ず結合先テーブルのプライマリキーとなっているカラムを指定してください。
複数の外部キーカラムがある場合は@JoinColumnsを使用し,それぞれの関連に対して@JoinColumnを指定してください。なお,複数の@JoinColumnを指定した場合は,name属性およびreferencedColumnName属性をそれぞれのアノテーションで指定してください。
@JoinColumnを明示的に指定しない場合,関連を示す永続化プロパティまたは永続化フィールドに単体の外部キーカラムを指定しているように扱われます。また,@JoinColumnの各属性値にデフォルト値が適用されます。
また,一つのカラムがフィールドに対して行った変更と,カスケード操作の関連づけによる変更が同時に実施されたことによって,整合性が取れなくなる場合があります。このため,name属性およびreferencedColumnName属性に指定したカラムをエンティティのフィールドに定義する場合は,insertable属性およびupdatable属性をfalseに指定する必要があります。この指定によって,フィールドに対して行った変更だけがデータベースに反映されますが,カスケード操作の関連づけによる変更はデータベースに反映されません。
適用可能要素は,メソッドとフィールドです。
(2) 属性
@JoinColumnの属性の一覧を次の表に示します。
属性名 |
任意/必須 |
属性の説明 |
---|---|---|
任意 |
対象テーブルを結合するために使用する外部キーカラム名を指定する属性です。 |
|
任意 |
name属性で指定した外部キーカラムによって参照された結合先テーブルのカラム名を指定する属性です。 |
|
unique |
任意 |
プロパティがユニークキーであるかどうかを指定する属性です。 なお,この属性は,CJPAプロバイダでは対応していません。 |
nullable |
任意 |
データベースのカラムにnull値を指定できるかどうかを指定する属性です。 なお,この属性は,CJPAプロバイダでは対応していません。 |
任意 |
@JoinColumnで指定したカラムをSQLのINSERT文に含むかどうか指定する属性です。 |
|
任意 |
@JoinColumnで指定したカラムをSQLのUPDATE文に含むかどうか指定する属性です。 |
|
columnDefinition |
任意 |
CREATE文を出力する場合,外部カラムに追加する規約をDDLで記載する属性です。 なお,この属性は,CJPAプロバイダでは対応していません。 |
任意 |
外部キーカラムを含むテーブル名を指定する属性です。 |
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
- 説明
-
外部キーカラムを含むテーブル名を指定する属性です。
指定できるテーブル名は,データベースの仕様に依存します。
- デフォルト値
-
プライマリテーブル名