我正在使用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 );

07-25 22:57
查看更多