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

kubo [E-MAIL ADDRESS DELETED]
2007年 8月 20日 (月) 17:57:58 JST


久保です。

メールが行き違ってしまいましたが...

> 追加情報です。
> 
> > □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 メーリングリストの案内