[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 メーリングリストの案内