[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 メーリングリストの案内