sequenceDefinitionMap

sequenceDefinitionMapとは?

テーブルとシーケンスを関連付ける設定をするDBFluteプロパティ。DBFluteクライアントの 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)
}