[Seasar-user:9987] Re: [DBFlute]torque.versionNoFieldNameの設定方法
Yu Tagaya
[E-MAIL ADDRESS DELETED]
2007年 8月 20日 (月) 19:35:09 JST
久保さん
多加谷です。
> ※恐らくisJavaNameOfColumnSameAsDbName=trueにされていますよね?
はい。
getVersionNoJavaNameを修正したところうまく行きました。
torque.versionNoFieldName = VERSION_NOだとフィールドが生成されないようです。
情報をありがとうございました。
以下、ファイルの最終形です。
□設定ファイル
torque.versionNoFieldName = VerNo
torque.commonColumnMap =
map:{RegDttm=TIMESTAMP;ModDttm=TIMESTAMP;LastModDttm=TIMESTAMP;RegUserId=INTEGER;ModUserId=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())
\
; 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())
\
}
□生成されたEntityファイル
/** VERSION_NO-Annotation */
public static final String VERSION_NO_PROPERTY = "verNo";
> 久保です。
>
> メールが行き違ってしまいましたが...
>
>> 追加情報です。
>>
>> > □torque.versionNoFieldName = VerNo
>> >
>> > /** VERSION_NO-Annotation */
>> > public static final String VERSION_NO_PROPERTY = "verno";
>>
>> の状態で、
>>
>> /** VERSION_NO-Annotation */
>> public static final String VERSION_NO_PROPERTY = "verNo";
>>
>> に変えたらうまく行きました。
>>
>> vmを見ると、"$table.VersionNoUncapitalisedJavaName"で出力していますね。
>>
>> DBFluteを改造したせいかとも思いましたが、UpdateDateのときはうまく
>> 行っていますし、ここだけ失敗する理由がわかりません。
>> フィールド名が悪いんですかね。
>
> 追加情報ありがとうございます。
>
> どうやら、DBFluteの不具合でした。(すいません)
> 以下の状況に全てに当てはまると発生します。
>
> A. Java版
> B. Column名とProgram名が同じ(isJavaNameOfColumnSameAsDbName=true)
> C. torque.versionNoFieldNameに限る
> D. VersionNoのColumn名に途中で大文字含み
>
> ※恐らくisJavaNameOfColumnSameAsDbName=trueにされていますよね?
>
>
> 根本的な修正としては、
> 「Table#getVersionNoJavaName()において、
> isJavaNameOfColumnSameAsDbNameの値を考慮する」
> となります。(これが抜けていました)
>
> 今までの利用者で、Java版でisJavaNameOfColumnSameAsDbNameをtrueに
> する人がいなかったため、発見が遅れたのかと想像しております。
>
>
> こちらの修正は、DBFlute-0.5.5にて反映します。
> ですが、DBFlute自体を改造されていて、
> おいそれとVersion挙げられないかと思いますので、
> 回避策として、
>
> torque.versionNoFieldName = VerNo
>
> ↓
>
> torque.versionNoFieldName = VERSION_NO
>
> としてみて下さい。
> 恐らく、「VERSION_NO_PROPERTY = "verNo";」と出力されるはず
>
>
> 無論、Table#getVersionNoJavaName()を直接直してしまうのも手です。
> getVersionNoJavaName()で、makeJavaName()を呼び出しているところを
>
> final String versionNoFieldName =
> getDatabase().getVersionNoFieldName();
> final DfBasicProperties basicProperties =
> getProperties().getBasicProperties();
> if (basicProperties.isJavaNameOfColumnSameAsDbName()) {
> return versionNoFieldName;
> } else {
> return makeJavaName(versionNoFieldName);
> }
>
> というように判定入れることで、正しい動きをするかと思います。
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内