[Seasar-user:7138] Re: [DBFlute]join 時の別名付与について

kubo [E-MAIL ADDRESS DELETED]
2007年 4月 9日 (月) 16:02:25 JST


久保です。

> DBFluteにてleft outer joinを使用した際に、複数のローカルcolumnに
> 同一の外部columnを指定した場合、生成されたSQLに内部的に振られて
> いるテーブルの別名について、現在、
> 
> 「【テーブル名のアンダーバー無し】By【カラム名のアンダーバー無し】」
> 
> と、なっていると思いますが、当方のプロジェクトにて、どうしても
> oracleの制約(30 CHAR以内)に引っかかってしまう(SqlException)
> という問題が発生しています。
> 
> そこで、この別名を短くすることはできないでしょうか?

なるほどOracleはFrom句のAlias名も30文字制限だったのですね...

こちらDBFlute側(つまり自分)が頑張る以外に対応策はありません。


今2つ案を考えて迷っています。

<A>
Alias名の「tableNameByColumnName」を
  → tableNameByCe   // 先頭と最後の1文字を付与
  → tableNameByCome // 先頭と最後の2文字を付与

というようにColumn名がどうにかして省略する。

メリット  : DBFlute側の修正が簡単。既に試してみた。
デメリット: Column名の規則性に依存してしまう。
             場合によってはユニークにならないのでCompileErrorになる。

<B>
Alias名の「tableNameByColumnName」を
  → tableName1
  → tableName2

というようにS2DaoのREL_KEYに設定する番号をそのまま利用する。

メリット  : 絶対的にユニークになるはず。
デメリット: DBFlute側の修正がちょっとある。
             まだ試していない。(数字入れても大丈夫かな!?検証中)


という感じです。
「A」は簡単ですが、仕様的に行き詰ってしまうので、
現在「B」を検討中です。







Seasar-user メーリングリストの案内