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

kubo [E-MAIL ADDRESS DELETED]
2008年 7月 12日 (土) 00:44:53 JST


久保です。

早川さん、こんばんは

DBFluteご利用ありがとうございます。
(DBFlute for S2JDBCのご質問を頂いたのはこのMLでは初めてです)

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

なるほど、
DBFlute-Entityでは必ずColumnアノテーションを付与しているため現象は
発生しませんが、S2JDBC-Entityの方ではpublicフィールドで
そのままカラムのマッピングを表現しているために発生するようですね。

現状、S2JDBC-Entityの方でColumnアノテーションを
付与するオプションは存在しません。

> 3.テーブルの列名を変更する
これができれば一番良いですが、
また出てきたときにキリがないですね。

DBFluteのVelocityテンプレート「S2jdbcBaseEntity.vm」
を直接修正して、Columnアノテーションを付けてはどうでしょうか?
${col.name}で、実際のDB上のカラム名が取得できます。

https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-s2jdbc-example/mydbflute/dbflute-0.7.3/templates/om/java/other/s2jdbc/entity/S2jdbcBaseEntity.vm


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

そう考えると、やはりDBFlute-Entityと同様にColumnアノテーションを
必ず付与する仕様にした方がいいかもしれませんね。。。


2008/7/12 早川貴彦 <[E-MAIL ADDRESS DELETED]>:
> 早川と申します。
>
> 現在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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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