[Seasar-user:9980] [DBFlute]torque.versionNoFieldNameの設定方法

Yu Tagaya [E-MAIL ADDRESS DELETED]
2007年 8月 20日 (月) 15:54:28 JST


多加谷@アークシステムです。

DBFluteのtorque.versionNoFieldNameにバージョン管理用のフィールド名を
設定し、排他制御しようとしていますが、where句には条件が入るものの、
値がインクリメントされません。

S2Daoのマニュアルを見ると、

「例えば、2人のユーザがversionNo値0の同一データを取得して更新しようとした場合、 

先に更新したユーザは正常に登録することができます。
そのとき自動でversionNoはインクリメントされ、DBのversionNoは1となります。」

とありますが、これをS2Daoが値を増分してくれるという意味にとっています。

update時にバージョンカラムの値を1増やす方法を教えてください。
以下、追加情報です。

・DB
    VerNo           int             NOT NULL,

・設定ファイル
torque.versionNoFieldName = VerNo

torque.commonColumnMap = 
map:{RegDttm=TIMESTAMP;ModDttm=TIMESTAMP;LastModDttm=TIMESTAMP;RegUserId=INTEGER;ModUserId=INTEGER;VerNo=INTEGER;InvalidFlg=VARCHAR}

torque.commonColumnSetupBeforeInsertInterceptorLogicMap = map:{ \
        RegDttm=jp.xxx.core.ApplicationContext.getCurrentTimestamp() \
        ; ModDttm=jp.xxx.core.ApplicationContext.getCurrentTimestamp() \
        ; LastModDttm=new java.sql.Timestamp(System.currentTimeMillis())  \
        ; RegUserId=new 
java.math.BigDecimal(jp.xxx.core.ApplicationContext.getApplicationUser().getUserId()) 
\
        ; ModUserId=new 
java.math.BigDecimal(jp.xxx.core.ApplicationContext.getApplicationUser().getUserId()) 
\
  ; VerNo=new java.math.BigDecimal(1) \
  ; InvalidFlg="n" \
    }

torque.commonColumnSetupBeforeUpdateInterceptorLogicMap = map:{ \
        ModDttm=jp.xxx.core.ApplicationContext.getCurrentTimestamp() \
        ; LastModDttm=new java.sql.Timestamp(System.currentTimeMillis())  \
        ; ModUserId=new 
java.math.BigDecimal(jp.xxx.core.ApplicationContext.getApplicationUser().getUserId()) 
\
 }





Seasar-user メーリングリストの案内