[Seasar-user:2353] 【S2Dao】 「要望・提案」 A-DaoMetaData & B-JOINアノテーション

久保 雅彦 jazzflute
2005年 7月 13日 (水) 23:30:29 JST


久保です。

最近たくさん対応してもらっているのに、さらに要望を出してしまいます。
申し訳ございません。


[A]

ついこないだ、DaoMetaDataImplのメソッドをprotectedに変更して頂いた
のですが、「Dbms dbms_」や「Map sqlCommands_」などのインスタンス変数
がprivateなのでOverrideしても何もできません。
自分が依頼を出したときに気付かなかったのが明らかに悪く、
大変申し訳ないのですが、
  1 インスタンス変数をprotected
  2 インスタンス変数にアクセスするためのprotectedのGetterメソッドを追加
どちらかの方法で可能であれば対応して頂けませんでしょうか?{要望です}
恐らくDaoMetaDataImplだけでなく、他の拡張ポイントのクラスでも
同じ事が言えるかも知れません。
全く急がないのでお時間があるときにお願いします。



[B]

S2DaoにはSelect文の自動生成機能がありますが、デフォルトでは
FKで定義されているテーブルを全てLeftOuterJoinで結合して
持ってきます。この機能はとても便利で欠かせないものではありますが、
やはり不要なテーブルを結合して持ってきてしまうのはマズい場合が
あります(親にCLOBやBLOBが存在する場合・for updateする場合など)。

そこで出来れば、JOINアノテーション(例えばです)なるものが
あれば、とても便利であると思われます。{提案です}

例)
  テーブル:
    MS_EMPLOYEE (FK to MS_DEPARTMENT, FK to OTHERS)
    MS_DEPARTMENT

  MsEmployeeDao:
    ...selectEntity_JOIN = "MS_DEPARTMENT"; //カンマ区切りで複数指定
    (or ...selectEntity_JOIN = new Class[] {MsDepartmemt.class})

    ...selectEntity(...);

  Client-Code:
    MsEmployeeDao.selectEntity(...); // 従業員と部門マスタのみ結合

ただ、ソースを読んでいて、これを実現するのには一苦労と感じてはいます。
Dbmsインターフェースのサブクラスにてfrom句を作成する際に、
JOINアノテーションにて指定されたテーブルのみで作成するように
しなければなりません。createAutoSelectFromClause()にJOINアノテー
ションのテーブル指定情報を渡さなければならないのと、Standardに
大勢のサブクラスがいることを考慮すると、メソッドのシグネチャの変更や
数多くのクラスに対するてこ入れが発生するので、影響が大きいのでは
ないかと感じています。{Dbms関連クラスをごっそり修正}


この件に関して、少なくとも今後対応するか全くしないかの方針だけでも
わかればと考えております。人によっては、全て[.sql]ファイルで書く
という方針の方も沢山いらっしゃると思うので、自分の意見が少数ならば
対応しないほうが「シンプル」というのもわかります。

ただ、もし今後も対応する予定がないというならば、自分は困ってしまうので
それはそれで割り切って、以下の拡張を独自に実装しようと思っています。

例)
  テーブル:
    MS_EMPLOYEE (FK to MS_DEPARTMENT, FK to OTHERS)
    MS_DEPARTMENT

  MsEmployeeDao:
    ...selectEntity_JOIN = "Non";   // Non or All (JOIN宣言無し=All)
    ...selectEntity(...);

    ...selectEntityJoinAll_JOIN = "All";
    ...selectEntityJoinAll(...);

  Client-Code:
    MsEmployeeDao.selectEntity(...); // 従業員のみ検索

全て結合するのか、全く結合しないのか、だけを指定できるJOINアノテーション
ですが、JOINアノテーションがNonの場合に、
BeanMetaData#getRelationPropertyTypeSize()が0を返すようにProxyなどで
細工してしまえばDaoMetaDataImplのみの拡張で対応できます。
中途半端ですが、これだけでもだいぶ汎用性は増します。
とは言っても試してないのでまだまだ確証なしですが、いずれにせよ、
この問題が対応予定無しならば、割り切って何らかの方法で独自拡張しようと
思っています。なので、対応予定が有るか無いかを教えて頂けるだけでも
ありがたいです。


長々とすいませんでした。
よろしくお願いします。


-- 
久保 雅彦 <[E-MAIL ADDRESS DELETED]>




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