sequenceMap
Java6版までは、sequenceDefinitionMap という名前でした。(古い名前でも動きます)
sequenceMapとは?
テーブルとシーケンスを関連付ける設定をするDBFluteプロパティ。DBFluteクライアントの dfprop 配下の sequenceMap.dfprop (sequenceDefinitionMap.dfprop) という名前のテキストファイルです。主に Generateタスク にて参照されます。
この設定をすることで、該当のテーブルのBehaviorに(関連付いた)シーケンスに対するメソッドが自動生成され、insert 実行時には自動でそのメソッドが呼び出され、PKの登録値となります。
プロパティ
map型プロパティ で、テーブルとシーケンスの関連を定義します。
PostgreSQLの serial 型や bigserial 型でPKを定義している場合、テーブルとシーケンスの関係はメタデータ情報から解決するため、設定は不要です。 (但し、シーケンスキャッシュを利用する場合は、serial 型のシーケンスであっても明示的に設定する必要あり)
sequenceDefinitionMapの仕様 @sequenceDefinitionMap.dfprop
map:{
; [table-name] = [sequence-name (with cache option)]
...
}
以下、(*)の付いたプロパティは必須です。
table-name (*)
シーケンスに関連付けるテーブル名を指定します。
AdditionalSchema (追加スキーマ)のテーブルの場合でも、特にスキーマ名の修飾は必要ありません。 (DBFluteでは、自動生成対象のテーブル名はユニークであることが前提のため)
- 値候補
- テーブルの名前 (自動生成対象になっていること)
- デフォルト
- なし
- 補足
-
- 大文字小文字の区別なし (但し実体と合わせることを推奨)
- (単一の)PKが定義されたテーブルであること
- AdditionalSchema (追加スキーマ)のテーブルでも、スキーマ名の修飾は必要なし
テーブル名に加えて、"." ドットつなぎでカラム名を指定することで、 PK以外のカラムのためのシーケンスを定義することもできます(@since 0.9.7.8)。
sequence-name (*)
テーブルに関連付けるシーケンスの名前を指定します。
別スキーマのシーケンス
別スキーマのシーケンスを指定する場合は、アプリから(SQL上で)識別できる形式、例えば、"[スキーマ名].[シーケンス名]" というように指定します。特に AdditionalSchema (追加スキーマ)の設定とは関連はせず、独立した設定となります。 その分、テーブルとは違うスキーマのシーケンスの指定や、追加スキーマでないスキーマ(自動生成対象でないスキーマ)のシーケンスの指定ができるようになっています。 (別スキーマ同名シーケンスも指定可能)
シーケンスキャッシュ
(DBFluteが提供する)シーケンスキャッシュを利用する場合は、シーケンス名の後に ":dfcache(n)" を指定します。インクリメント方式を利用する場合は、":dfcache()" というようにキャッシュサイズは省略可能です。
- 値候補
- シーケンスの名前 (+ 必要であればキャッシュ指定)
- デフォルト
- なし
- 補足
-
- 指定された名前(キャッシュ指定は除く)で、そのままSQLが発行される
- 大文字小文字の区別はDBMS依存(そのままの名前でSQLで発行されるため)
Example
e.g. 基本的な設定 @sequenceDefinitionMap.dfprop
map:{
; PURCHASE = SEQ_PURCHASE
; MEMBER = SEQ_MEMBER
; MEMBER_LOGIN = SEQ_MEMBER_LOGIN
; PRODUCT = SEQ_PRODUCT
}
e.g. シーケンスキャッシュの利用 @sequenceDefinitionMap.dfprop
map:{
; PURCHASE = SEQ_PURCHASE:dfcache() # increment way
; MEMBER = SEQ_MEMBER:dfcache(50) # batch way
; MEMBER_LOGIN = SEQ_MEMBER_LOGIN
}
e.g. 追加スキーマのテーブルとシーケンスを利用 {NEXT_SCHEMA_PRODUCT} @sequenceDefinitionMap.dfprop
map:{
; PURCHASE = SEQ_PURCHASE
; MEMBER = SEQ_MEMBER
# テーブルにはスキーマ名は不要で、シーケンスには必要
# o テーブルとシーケンスのスキーマが違ってもOK
# o シーケンスのスキーマは追加スキーマでなくてもOK
; NEXT_SCHEMA_PRODUCT = NEXTSCHEMA.SEQ_NEXT_SCHEMA_PRODUCT
}
e.g. 追加スキーマのシーケンスにキャッシュ指定 {NEXT_SCHEMA_PRODUCT} @sequenceDefinitionMap.dfprop
map:{
; PURCHASE = SEQ_PURCHASE
; MEMBER = SEQ_MEMBER
; NEXT_SCHEMA_PRODUCT = NEXTSCHEMA.SEQ_NEXT_SCHEMA_PRODUCT:dfcache(50)
}