additionalPrimaryKeyMap

additionalPrimaryKeyMapとは?

実質的なPK(PrimaryKey)の関連がありながらも実際にはPK制約が存在しないテーブルおよびビューについて、 DBFluteが生成するEntityにてPKとして扱えるようにする DBFluteプロパティ。DBFluteクライアントの dfprop 配下の additionalPrimaryKeyMap.dfprop という名前のテキストファイルです。主に Generateタスク を実行する際に参照され、実際にPK制約が存在しないテーブルでも、このプロパティの設定を行うことでPKを持ったEntityを生成できます。

PK制約がない場合のDBFlute

PK制約がない場合(かつ、このプロパティを利用しない場合)は、"ConditionBeanでのPKによる検索" や "Behaviorによる登録・更新・削除処理" ができません。PK制約自体に多くのメリットがあるため、基本的にはPK制約がしっかりDB側に付与されていることが推奨されます。

DB設計 - PK制約について

主な利用パターン

PK制約は存在しないが実質的にPKである
基本的にはPK制約がしっかりDB側に付与されていることが推奨されますが、 DB側の事情によってPK制約が存在しない場合(かつ、実質的なPKがある場合)にこのプロパティが有効です。
ビューなどそもそもPK情報を持たないオブジェクト
参照先のテーブルなどがPK制約を持っている場合(ビューの構造的・要件的にそのPKを扱いたい場合)にこのプロパティが有効です。

プロパティ

map型プロパティ で、"PKの名前" (任意だがユニークである必要がある)とそれに対するテーブル名とカラム名を定義します。

additionalPrimaryKeyMapの仕様 @additionalPrimaryKeyMap.dfprop
map:{
    ; [PK-name] = map:{
        ; tableName = [table-name] ; columnName = [column-name for PK]
    }
    ; ...
}

以下、(*)の付いたプロパティは必須です。

PK-name (*)

PKの名前を指定します。mapのキーになっていて、ユニークである必要があります。 習慣的に、実際にDBに存在するPK制約を含めてもユニークな名前(かつ、大文字で "PK_" で始まるもの)を付けることをお奨めします。

tableName (*)

テーブル名を指定します。

値候補
テーブルの名前 (自動生成対象になっていること)
デフォルト
なし
補足
  • 大文字小文字の区別なし (但し実体と合わせることを推奨)

columnName (*)

PKとして扱うカラム名を指定します。

値候補
カラムの名前 (自動生成対象になっていること)
デフォルト
なし
補足
  • 大文字小文字の区別なし (但し実体と合わせることを推奨)
  • 複合PKの場合は、"/" (スラッシュ)区切りで複数のカラムを指定

Example

e.g. 会員の会員IDをPKとして扱う場合 @additionalPrimaryKeyMap.dfprop
; PK_MEMBER = map:{
    ; tableName = MEMBER ; columnName = MEMBER_ID
}
e.g. 会員の会員IDと生年月日をPKとして扱う場合 @additionalPrimaryKeyMap.dfprop
; PK_MEMBER = map:{
    ; tableName = MEMBER ; columnName = MEMBER_ID/BIRTHDATE
}