[seasar-s2dao-dev:271] Re: [Seasar-user:8147] S2Dao で特殊な文字を含むカラム名
Hirotaka HONMA
[E-MAIL ADDRESS DELETED]
2007年 6月 7日 (木) 15:11:20 JST
本間@茅場町です。
on Thu, 07 Jun 2007 12:57:57 +0900
in [seasar-s2dao-dev:270] Fw: [Seasar-user:8147] S2Dao で特殊な文字を含むカラム名
[E-MAIL ADDRESS DELETED] wrote:
> 下記の件ですが、対応するなら
> (1)BeanMetaDataCustomizerにカラム名を\"\"でくくるかを
> 設定するプロパティを追加。
> (2)BeanMetaData(BeeanMetaDataImplでなくて)に
> beanMetaDataCustomizerプロパティを追加して、SQLを生成
> するときにプロパティを参照して引用句を\"\"で囲む。
>
> といった感じになると思うのですが、どうでしょうか?
うーん、そもそもDB設計で解決するのが筋では、という私見なので
すが、未対応とするのも寂しいので4案考えてみました。
個人的には案2がベターかと思います。
■案1
ColumnアノテーションとTableアノテーションに、booleanの
『quoted属性』を設けて、trueだったらクォートして出力するとい
うもの。
(あ、TigerアノテーションだとTableではなくS2Daoアノテーション
なのですね。とするとtableNameQuoted属性??)
■案2
ColumnやTableアノテーションに
String TABLE = "\"FROM\""
とクォート付きで書かれていたら、そのまま出力するというもの。
メタデータと比較するときには、メタデータ側にはクォートが付い
ていないので、クォートを外して比較することになりそうです。
■案3
TableNameResolver・ColumnNameResolverみたいなインタフェース
を切って、
final String tableName = tableNameResolver#resolve(beanClass, databaseMetaData);
という感じにする、とか。
■案4
TableやColumnの値が ((SQL予約語) || (ASCII範囲外の文字)) の
場合はクォートして出力する。
seasar-s2dao-dev メーリングリストの案内