我正在使用jsp和hibernate构建购物车。
我使用复选框按品牌大小和价格过滤内容 选中的复选框将返回到存在hql查询的类。 所以我希望我单独的hql查询,可以处理这个问题。
就好像大小之类的参数之一是空的(意味着用户不使用它来过滤内容),而不是将空字符串传递给返回任何值的hql查询......
所以除了为不同的参数编写不同的方法之外,还有可能在空字符串的where子句或其他替代方法中重新获取所有值...
答案 0 :(得分:0)
首先,良好实践表明,不应该将String传递给查询,而应该传递null。也就是说,这个hql应该可以帮到你:
from Product p
where p.brand = coalesce(:brand, p.brand)
and p.size = coalesce(:size, p.size)
and p.price = coalesce (:price, p.price)
答案 1 :(得分:0)
我通常使用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 );