[Seasar-user:15007] [DBFlute]自動生成されるentityにColumnアノテーションを付加したいのですが

早川貴彦 [E-MAIL ADDRESS DELETED]
2008年 7月 12日 (土) 00:17:59 JST


早川と申します。

現在S2JDBCを使用したプロジェクトにおいて、
テーブルのentityをDBFlute-S2JDBCを使用して作成しているのですが、
下記のような課題があり、解決策を模索しております。

何らかのよいアイディアは無いでしょうか?


[テーブルの状況]
約500テーブルあり
その中の1テーブル名と、300近い列名に、

STATUS1_1
STATUS1_2
・・・
のような、camel形式の規約にはそぐわない名前の物が存在する。
そのため、

    DB項目名  →  JAVAフィールド名 → DB項目名
例1: STATUS1_1 → status11          → STATUS11
例2: CMD_9KETA → cmd9keta          → CMD9KETA  となってしまい、SQL実行時に例外が発生する

(テーブル名については自動生成後のentityクラスの @Entity
 に、  name=テーブル名  を付加する事で対応する予定。)


[解決案として調査中の物]
1.自動生成時に何らかの設定により、@Columnアノテーションを付加する
  →dbflute-s2jdbc-example のdbflute_exampledb/dfrop内に設定可能な.dfprop
   ファイル・設定項目によっては実現できない。
   (mydbflute/dbflute_0.7.3/etc/client_directory-template/fullPropertiesも確認)
  (Web等も確認したが、確認漏れ?)

2.bsではなく、entityパッケージ内のentityクラスに対して、
  同名のフィールドを定義しoverrideさせ、@Columnアノテーションを付加する
 →自動生成によりテーブルとの整合性を取りやすくすることが目的なのに、
  その趣旨から外れてしまう。
  (+そもそも問題が発生しないか確認をとれていない)

3.テーブルの列名を変更する
 →個人的には一番望ましいのだが、他チームとの兼ね合いがあり、
  現在交渉中

4.jdbcバッチ実行後の中間xmlファイルにおいて何らかの手を加える
 →dtdを確認する限り、そのような設定を持っていない

5.名前の変換規則を変える
http://s2container.seasar.org/2.4/ja/s2jdbc_entity.html#カラム定義
にある、
>convention.diconで指定されている org.seasar.framework.convention.impl
>	.PersistenceNamingConventionImpl のfromPropertyNameToColumnName()の実装を変える

 → 一律ルールでは、今回の列名の状態に対応させることが難しい
   (単語の末尾に数字が来ることもあれば、先頭に来ることもあり、一律で対処出来そうに無い)

 調査中:(パターンを完全に洗い出せば、対応可能?ただ、その場合も今後の新パターンが
      出ないように調整が必須)


6.自動生成を最初の1度だけにし、今後については諦める
 →まだまだ列の追加・変更は発生しそうなため、望ましくない

見落としているWebの資料や、考え方、
あるいは他の良い方法はないでしょうか?
以上です。よろしくお願いいたします。


-- 
早川貴彦


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