[Seasar-user:20491] 【S2JDBC】多対多のテーブルにおける検索について

Shouta Morimoto [E-MAIL ADDRESS DELETED]
2011年 1月 9日 (日) 00:09:22 JST


お世話になります、森本と申します。
掲題の件について、質問いたします。


今以下の3テーブルがある状況で、DBからデータを引く事を考えています。
ショッピングサイト構築などでよく見かける注文履歴テーブルと
商品テーブルという多対多の関係の間に関連テーブルをはさむパターンです。
(本当にやりたいこととは少し違いますが、話を簡単にするために
 以下の例で説明させて頂きます。)

=========================================================
★注文履歴用のテーブル
CREATE TABLE `order_info` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)

★商品用のテーブル
CREATE TABLE `item_info` (
  `id` int(11) NOT NULL,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
)

★上記二つを結ぶための関連テーブル
CREATE TABLE `order_item_rel` (
  `order_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  PRIMARY KEY (`order_id`,`item_id`)
)
=========================================================

これらのテーブルを使って、注文履歴を抽出することを考えます。
SQLで言うと以下のようなことをしたいと考えています。

=========================================================
select a.id order_id, c.name item_name
from test.order_info a, test.order_item_rel b, test.item_info c
where a.id = b.order_id and b.item_id = c.id and a.id=1;
=========================================================

これをAutoSelectを使ってメソッドチェーンで表現することは
できるのでしょうか?JdbcManagerのfromメソッドには一つの
Entityしか指定できないようですし、S2JDBCのサンプルにも
このような例は載っていませんでした。

一応Entityだけは3テーブル分作成し、ManyToOne, OneToManyのアノテーション
を張ることができるところまでは確認しています。(Seasar2徹底入門より)

もし上記で実現できない場合、selectBySqlを使って、上記SQLを
直接Stringオブジェクトに書き込んでしまう方法も考えたのですが、
S2JDBCにおいてSQLの実行結果がどのようにJavaオブジェクトに
マッピングされているのかがわかっていないため、実際どのような
SQL及びJavaコードを書けばいいのかもわかっていません。

以上、初歩的な質問で申し訳ございません。
既存ドキュメント等への参照だけでも構いませんので、
ご教授の程よろしくお願いいたします。

---
森本



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