私は次のような基準クエリを持っています:
Criteria criteria = session.createCriteria(Parts.class);
Iterator<String> iterator = searchList.iterator();
Disjunction or = Restrictions.disjunction();
while (iterator.hasNext()){
or.add(Restrictions.like("partName", "%"+iterator.next()+"%"));
}
criteria.add(or);
criteria.add(Restrictions.in("partType", partType));
criteria.addOrder(Order.asc("partDesc"));
これにより、次のwhere句が生成されます。
from PartsDb..Parts this_ where (this_.PartName like ? or this_.PartName like ? or this_.PartName like ?) and this_.PartType in (?, ?) order by this_.PartDesc asc
'OR'句全体が中括弧で囲まれているため、正しい結果が得られません。クエリを次のようにします(OR句を中括弧なしで):
from PartsDb..Parts this_ where this_.PartName like ? or this_.PartName like ? and this_.PartType in (?, ?) order by this_.PartDesc asc
だから私はこれを書こうとしています:
Select * from dbo.Parts
where
PartName like '%ABC%'
or PartName like '%XYZ%'
or PartName like '%PQR%'
....
...
and PartType in ('a','b')
...
'searchList'内のオブジェクトの数は、ユーザーが入力した内容によって異なります。中括弧から可変数の「OR」句を取得する方法についてのヘルプは大歓迎です!!
ありがとう