[Seasar-user:3602] Re: [S2Dao]N:1マッピングについて

筒井 勉 [E-MAIL ADDRESS DELETED]
2006年 5月 11日 (木) 14:14:27 JST


筒井です。
上原さん、早速のアドバイス有難うございます。

>  もし自分がやるとしたら、
> T1用のdaoとT3用のdaoを用意して、
> a. の場合は普通にT1用のdaoのN:1の機能を利用し
> b.の場合はT1用のdaoからT1、T2を取得したのちにT3用のdaoからT3を取得して
> T2にT3をセットする関数をじぶんで書くでしょうか。

そうですね、最初はそうしようかと考えたんですが、以下の理由より、別の方法
は無いものかと考えていました。

・T1,T2,T3の情報が複数件必要な場合があり、上述の方法だとT3取得sqlが複数
回発行され、パフォーマンスが低下する。

・テーブルのスキーマに変更があった場合、Beanの修正は最小限に抑えたい。
(T1,T2のBeanとT1,T2,T3のBeanをそれぞれ用意するのは避けたい)

結果、下記の方法を採ることにしました。

(1)aの場合
  1)Bean
    public class T1ABean {
      public static final String TABLE = "T1";
      public static final int t2Bean_RELNO = 0;
      public static final String t2Bean_RELKEYS = "T2ID";


      private String id;
      private String col;
      private String t2id;

      private T2Bean t2Bean;

      略
    }

  2)Dao
    S2Daoによるsql自動生成

(2)bの場合
  1)Bean
    public class T1BBean extends T1ABean {

      public static final int t3Bean_RELNO = 1;

      private T3Bean t3Bean;

      略
    }

  2)Dao
    sqlファイルを用意する。
    <sql>
       select
         T1.id,
         T1.col,
         t2Bean.t2id  as t2id_0,
         t2Bean.t2col as t2col_0,
         t2Bean.t3id  as t3id_0,
         t2Bean.t3id  as t3id_1,
         t2Bean.t3col as t3col_1
       from
         T1,
         T2 t2Bean,
         T3 t3Bean
       where
         T1.id = /*id*/'001' and
         T1.t2id = t2Bean.t2id and
         t2Bean.t3id = t3Bean.t3id

以上
-- 
筒井 勉 <[E-MAIL ADDRESS DELETED]>




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