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

jazzatny jazzatny
2005年 2月 3日 (木) 03:56:41 JST


佐藤です。中村さんありがとうございます。

確かにSQL自動生成を行う場合はこの方法でEntityMgrを利用して
やればうまくいきそうですね。試してみます。

ただ、SQL文を用意してSQLコメントで処理する場合は適用できない
ですね。うーん残念。自動生成よりSQL文を用意する方が圧倒的に
多いのです。


> こんばんは、中村と申します。
>
> 動的に生成する部分をパラメータとして渡さないで、
> 文字列のまま渡してやればできないでしょうか?
>
>> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user
>





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