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