commonColumnMap
commonColumnMapとは?
共通カラム(CommonColumn)に関する設定を行うDBFluteプロパティ。DBFluteクライアントの dfprop 配下の commonColumnMap.dfprop という名前のテキストファイルです。主に Generateタスク から参照されます。このプロパティを設定することで、insert や update 処理で共通カラムに任意の値を自動設定することができます。
プロパティ
map型プロパティ で、共通カラムの定義、と insert、update 時の自動設定の定義をします。
commonColumnMapの仕様 @commonColumnMap.dfprop
map:{
; commonColumnMap = map:{
; [column-name1] = [JDBC-type1] ; [column-name2] = [JDBC-type2] ; ...
}
; beforeInsertMap = map:{
; [column-name1] = [expression to set the value]
; [column-name2] = [expression to set the value]
; ...
}
; beforeUpdateMap = map:{
; [column-name1] = [expression to set the value]
; [column-name2] = [expression to set the value]
; ...
}
commonColumnMap
共通カラムの組み合わせを定義します。
e.g. 共通カラムの組み合わせを定義 @commonColumnMap.dfprop
; commonColumnMap = map:{
; REGISTER_DATETIME=TIMESTAMP ; REGISTER_USER=VARCHAR
; UPDATE_DATETIME=TIMESTAMP ; UPDATE_USER=VARCHAR
}
- 値候補
- カラムとJDBC型のmap型プロパティ
- デフォルト
- なし (共通カラムの定義なし)
- 補足
-
- カラム名は大文字小文字の区別なし (但し実体と合わせることを推奨)
JDBC型は、実際に自動生成してマッピングされているJDBC型を指定して下さい。"JDBC型とプログラム型のデフォルトマッピング" の表を参考にして下さい。
ここで設定された 全ての共通カラムが定義されているテーブル が、共通カラムを持っているテーブルとして認識されます。例えば、どれか一つだけしか定義されていないテーブルは対象となりません。
共通カラムを持っているとして認識されたテーブルの Entity は、EntityDefinedCommonColumn インターフェースを実装します。
beforeInsertMap
テーブルを登録する直前に共通カラムに格納する値 を定義します。
カラム名は、commonColumnMapで指定したカラム(のみ)を指定できます。 また、格納する値の表現はプログラムの一行センテンスですが、後ろにセミコロンは不要です。
AccessContextは、$$AccessContext$$ という表現で解決することができます。
e.g. AccessContextから値を取得する場合 @commonColumnMap.dfprop
; REGISTER_DATETIME = $$AccessContext$$.getAccessTimestampOnThread()
その他、細かい仕様が幾つかあります。
beforeUpdateMap
テーブルを更新する直前に共通カラムに格納する値 を定義します。
設定方法は基本的に beforeInsertMap と同様です。但し、登録時の状態を保持し続けるカラムはここでは指定する必要はありません(してはいけません)。
自動設定の細かい仕様
beforeInsertMap, beforeUpdateMap の細かい仕様について。
Entity自身から値を取得
Entity自身から値を取得することができます。例えば、既に登録されている登録日時の値をそのまま更新日時に設定するような場合に有効です。
e.g. Entity(自分自身)から値を取得する場合 @commonColumnMap.dfprop
; UPDATE_DATETIME = entity.getRegisterDatetime()
自動設定で区分値メソッドを利用
自動設定の処理で区分値メソッドを利用することができます。 このようなメソッドの戻り値がなく独立している処理の場合は、先頭に "$" を付与します。
e.g. 固定の値を設定する場合 @commonColumnMap.dfprop
; LOGICAL_DELETE_FLG = $entity.setLogicalDeleteFlg_False()
固定の値を設定
あまり想定されませんが、固定の値を設定する場合に、(文字列や数値の)リテラルを記述できます。
e.g. 固定の値を設定する場合 @commonColumnMap.dfprop
; UPDATE_USER = "foo"
accessValueMap の利用
AccessContext の accessValueMap を利用するような場合は、キー値に文字列リテラルを指定し、かつ、プロパティの型にダウンキャストします。
e.g. accessValueMap を利用して設定 (ダウンキャストが必要) @commonColumnMap.dfprop
; SPECIAL_ITEM = (String)$$AccessContext$$.getAccessValueOnThread("special")
排他制御用のカラムの自動設定は不要
排他制御用のカラムに関しては、排他制御の仕組みで自動で適切な値に更新されますので、ここで自動設定する必要はありません(共通カラムの定義には含めても構わない)。 例えば、バージョン番号のインクリメントは排他制御の仕組みで実行されます。