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