[Seasar-user:1603] Re: [S2Dao] N:1:1 のような問い合わせの自動化

Hikaru Taniguchi taniguchi
2005年 3月 11日 (金) 22:41:21 JST


たにぐちです。
自己レスばかりして申し訳ない。

この件、かなり暫定的な方法かもしれませんが、解決しました。

以下、ご参考までに手順です。

(前提) 今回は使用DBがOracleでしたので全てのケースに使えるわけではない

org.seasar.dao.dbms.Oracleを継承した MyOracleとかいうクラスを作ります。
このMyOracleクラスに Oracleクラスのソースの createAutoSelectFromClause
のソースをコピペしてきます (うーむ)。

で、以下の部分を変更します。

                whereBuf.append(myTableName);
                whereBuf.append(".");
                whereBuf.append(rpt.getMyKey(j));    
	      
↑これを、 ↓こうする

                String mykey = rpt.getMyKey(j);
                if (mykey.lastIndexOf(".") == -1) {
                    whereBuf.append(myTableName);
                    whereBuf.append(".");
                }
                whereBuf.append(rpt.getMyKey(j));    

次に、DBMS種別ごとのクラスの対応を書いてある dbms.properties を自分の
プロジェクトのルートに作りなおします。 これも s2daoのjarからコピペし
てきて、 Oracle= の部分だけ  Oracle=a.b.c.MyOracle  に書き換えます。
(設定をオーバーライドするイメージ)

これで、
   SalesRanking(RANK) <<----> Employee(EMP) <<---> Department(DEPT)
の一括取得が出来ました。

SalesRankingBeanにて

    private Employee employee;
    private Department department;
    
    public static final int employee_RELNO = 0;
    public static final int department_RELNO = 1;
    
    public static final String department_RELKEYS = "employee.DEPTNUM:DEPTNO";

と書くと、WHERE句上は
   employee.DEPTNUM = department.DEPTNO(+)
という風に展開されますので、 N:1(N):1 が 見かけ上 N:1×2 に分割された
ようになりました。

あまり根本的解決ではないのですが、ひとまず暫定解決はした、という旨お知
らせです。お騒がせしました。

At Fri, 11 Mar 2005 21:34:41 +0900,
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]> wrote:
> 
> たにぐちです。未解決ですが自己レス。
> 
> employee表に DEPTNUMがあり、department表のDEPTNOに foreign key な前提
> で、
> ------------------------------------------------------------------
>   public static final employee_RELNO = 0;
>   public static final department_RELNO = 1;
> 
>   public static final department_RELKEYS = "DEPTNUM_0:DEPTNO";
> ------------------------------------------------------------------
> という風に書けばひょっとしてうまくいくのか!と思ってやってみましたが
(以下略)

--
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>



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