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