[Seasar-user:20492] Re: 【S2JDBC】多対多のテーブルにおける検索について
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2011年 1月 9日 (日) 00:30:46 JST
小林 (koichik) です.
Date: Sun, 09 Jan 2011 00:09:22 +0900
From: Shouta Morimoto <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20491] 【S2JDBC】多対多のテーブルにおける検索について
> 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;
> =========================================================
この SQL は次のように書いたのと同じです.
select a.id order_id, c.name item_name
from test.order_info a
inner join test.order_item_rel b on a.id = b.order_id
inner join test.item_info c on b.item_id = c.id
where a.id=1;
> これをAutoSelectを使ってメソッドチェーンで表現することは
> できるのでしょうか?JdbcManagerのfromメソッドには一つの
> Entityしか指定できないようですし、S2JDBCのサンプルにも
> このような例は載っていませんでした。
上記の INNER JOIN を使った SQL は,
「結合のネスト」
http://s2container.seasar.org/2.4/ja/s2jdbc_manager_auto.html#結合のネスト
を使って
jdbcManager
.from(OrderInfo.class)
.innerJoin("orderItem")
.innerJoin("orderItem.itemInfo")
.id(id)
.getResultList();
のように SQL とほぼ同じように書くことができます.
S2Jdbc-Gen を使っているなら,"orderItem" 等の
リテラルを使わず
jdbcManager
.from(OrderInfo.class)
.innerJoin(orderItem())
.innerJoin(orderItem().itemInfo())
.id(id)
.getResultList();
のようにすることもできます.
http://s2container.seasar.org/2.4/ja/s2jdbc_typesafe.html
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
<property name="twitter">"http://twitter.com/koichik"</property>
</component>
Seasar-user メーリングリストの案内