[Seasar-user:6206] SQL コメントを使用した SQL 自動生成について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 2月 16日 (金) 13:15:18 JST


お疲れ様です。
S2Daoでつまずいています。ご教授願います。

現在S2Daoを使用し、SQLコメントで動的にSQLを生成しデータ
を取得しようとしています。
Daoに検索条件を保持したDTOを渡し、その内容をチェックして
います。
DTOにはItemDTOを渡しています。

以下SQLです。

SELECT
        *
    FROM
        ITEM
    WHERE
        DELETE_FLAG = 0
        /*IF item.IsHoge*/
        AND (
            PRICE BETWEEN /*item.priceBottom*/0
            AND /*item.priceTop*/100 
        )
        /*END*/
        /*IF item.name1 != null && !''.equals(item.name1)
*/
        OR (
            NAME LIKE /*item.name1*/'hoge' 
            /*IF item.name2 != null && !''.equals(
item.name2) */
            OR NAME LIKE /*item.name2*/'hoge'
            /*END*/
            /*IF item.name3 != null &&
!''.equals(item.name3) */
            OR NAME LIKE /*item.name3*/'hoge '
            /*END*/
            /*IF item.name4 != null &&
!''.equals(item.name4) */
            OR NAME LIKE /*item.name4*/'hoge'
            /*END*/
            /*IF item.name5 != null &&
!''.equals(item.name5) */
            OR NAME LIKE /*item.name5*/'hoge'
           /*END*/
        ) 
        /*END*/

です。
で、渡すDTOのIsHogeがtrueでname1とname2とname3に値が入っ
ている場合は

SELECT
        *
    FROM
        ITEM
    WHERE
        DELETE_FLAG=0 
        AND (
            PRICE BETWEEN 10 
            AND 50
        ) 
        OR (
            NAME LIKE '%hoge1%' 
            OR NAME LIKE '%hoge2"%'
            OR NAME LIKE '%hoge3"%')
と、私が期待したとおりにSQLが生成されてくれます。しかし
、
IsHogeがfalseで、後は同じ内容のDTOを渡した場合に
SELECT
        *
    FROM
        ITEM
    WHERE
        DELETE_FLAG=0 
        OR (
            NAME LIKE '%hoge1%'
            NAME LIKE '%hoge2"%'
            OR NAME LIKE '%hoge3"%') 

となり、NAME LIKE '%hoge2"%'の前のORが消えてしまいます。
これを消えないように出力するにはどう書けばいいのでしょう
か?

読みにくくて申し訳ありませんがよろしく御願いします。




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