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