使用hibernate获取空字符串的where子句中的所有值

时间:2014-02-27 19:24:46

标签: java sql hibernate

我正在使用jsp和hibernate构建购物车。

我使用复选框按品牌大小和价格过滤内容 选中的复选框将返回到存在hql查询的类。 所以我希望我单独的hql查询,可以处理这个问题。

就好像大小之类的参数之一是空的(意味着用户不使用它来过滤内容),而不是将空字符串传递给返回任何值的hql查询......

所以除了为不同的参数编写不同的方法之外,还有可能在空字符串的where子句或其他替代方法中重新获取所有值...

2 个答案:

答案 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 );