[Seasar-user:1467] Re: S2Dao:where句の一部をバインドできないでしょうか。

NAKAMURA Manabu under_the_starry
2005年 2月 2日 (水) 22:51:56 JST


こんばんは、中村と申します。

動的に生成する部分をパラメータとして渡さないで、
文字列のまま渡してやればできないでしょうか?

> select *
>    from a_tbl
>   where a_tbl.where_cd = '8899'
>     and ((a_tbl.what_cd = '0' and a_tbl.why_cd = '1') or
>           (a_tbl.what_cd = '3' and a_tbl.why_cd = '2') or
>           (a_tbl.what_cd = '3' and a_tbl.why_cd = '2'))

というSQLを実行したい場合、

((a_tbl.what_cd = '0' and a_tbl.why_cd = '1') or
    (a_tbl.what_cd = '3' and a_tbl.why_cd = '2') or
    (a_tbl.what_cd = '3' and a_tbl.why_cd = '2'))

この部分を動的に生成する時に、

((a_tbl.what_cd = ? and a_tbl.why_cd = ?) or
    (a_tbl.what_cd = ? and a_tbl.why_cd = ?) or
    (a_tbl.what_cd = ? and a_tbl.why_cd = ?))

というパラメータ付きの形で生成して、同時に

Object[] params = [0, 1, 3, 2, 3, 2];

という配列も一緒に生成します。
で、この配列の先頭に固定のパラメータの 8899 を挿入してやって、
EntityManager で、
getEntityManager().find("a_tbl.where_cd = ? and " + 生成した文字列, 生成した配列);

という形で実行すればいけるんじゃないかと思います。
お試しください。

--------------------------------------
 中村 学/NAKAMURA Manabu
 [E-MAIL ADDRESS DELETED]
--------------------------------------





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