我正在使用jsp和hibernate建立购物车。
我正在使用复选框按品牌大小和价格过滤内容
选中的复选框将返回到存在hql查询的类。
所以我想我可以处理此的单个hql查询。
就像如果像size这样的参数之一为空(意味着用户不使用它来过滤内容),则将空字符串传递给hql查询并返回任何值...
所以有可能在空子句的where子句中检索所有值或除编码不同参数的不同方法外的其他替代方法...
最佳答案
我通常将Criteria api用于此类事情...如果用户未指定大小,请不要将其添加到条件查询中。
Criteria criteria = session.createCriteria(MyClass.class);
if(size != null && !size.isEmpty()){
criteria.add(Restrictions.eq("size", size);
}
要通过OR语句具有多个限制,请使用Disjunction。对于AND,您可以使用Conjunction。
Criteria criteria = session.createCriteria(MyClass.class);
Disjunction sizeDisjunction = Restrictions.disjunction();
String[] sizes = { "small", "medium", "large" };
for(int i = 0; i < sizes.length; i++){
sizeDisjunction.add(Restrictions.eq("size", sizes[i]);
}
criteria.add(sizeDisjunction );