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

上原 慶三 keizou
2005年 7月 15日 (金) 00:56:55 JST


上原です。

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

あとでやっておきます。
S2Daoのアノテーション対応も控えていることですし、S2Daoをできるだけ拡張し
やすいように変更していこうと思ってるんで何かありましたらどんどん提案して
ください。
できれば、どのような拡張を行おうと思っているのか教えてもらえれば幸いです。

> [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関連クラスをごっそり修正}

これって、たとえばNO_PERSISTENT_PROPSアノテーションでdepartment(か
Deptno)が指定されていたらJOINを行わないようにすれば、目的は達成できるで
しょうか。
S2Daoの他のコミッタがどのように考えられているかわからないのですが、自分
の中では、アノテーションの追加は学習コストが上がるのと、一度追加すると容
易に変更できないので慎重にすべきだと思うんですが、Dbms関連クラスに修正が
起きるぐらいならぜんぜん大丈夫だと思います。




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