如何在Hibernate Criteria中添加条件判断,实现动态搜索查询?
解决Hibernate Criteria动态搜索条件问题
嘿,我完全懂你遇到的困扰——当某个搜索字段是空或者null时,硬塞到AND条件里会导致查询结果不符合预期对吧?其实在原生Hibernate Criteria中,你可以像Grails那样动态添加查询条件,只把非空的字段纳入查询逻辑,具体实现很简单:
实现代码示例
Criteria criteria = session.createCriteria(User.class); // 仅当firstName非空时添加模糊查询条件 if (firstName != null && !firstName.trim().isEmpty()) { criteria.add(Restrictions.ilike("firstName", firstName)); } // 仅当lastName非空时添加模糊查询条件 if (lastName != null && !lastName.trim().isEmpty()) { criteria.add(Restrictions.ilike("lastName", lastName)); } // 执行查询 List<User> userList = criteria.list();
为什么这样可行?
Hibernate Criteria的默认行为就是把所有通过add()方法添加的条件用逻辑AND连接起来,所以你根本不需要手动用Restrictions.and()去包裹所有条件。这样一来,当某个字段为空或null时,对应的条件就不会被加入到查询中,也就不会干扰其他有效条件的匹配结果啦。
如果之后需要更复杂的条件组合(比如部分条件用OR连接),你还可以用Restrictions.disjunction()(对应OR)或者Restrictions.conjunction()(对应AND)来分组条件,但针对你当前的搜索场景,上面的简单动态添加方式就完全够用了。
内容的提问来源于stack exchange,提问作者Aks 1316
相关产品推荐
相关产品推荐

