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