CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); //这些都不是重点 CriteriaQuery<ShippingItem> criteriaQuery = criteriaBuilder.createQuery(ShippingItem.class); //这些都不是重点 Root<ShippingItem> root = criteriaQuery.from(ShippingItem.class); //这些都不是重点 criteriaQuery.select(root); //这些都不是重点 if (CollectionUtils.isNotEmpty(statuses) && isFrozen) { //暂时的解决方法 criteriaQuery.where(criteriaBuilder.or(criteriaBuilder.in(root.get("status")).value(statuses), criteriaBuilder.equal(root.get("isFrozen"), isFrozen))); } /*if (CollectionUtils.isNotEmpty(statuses)) { //这才是本人想要的效果 criteriaQuery.where(criteriaBuilder.or(criteriaBuilder.in(root.get("status")).value(statuses))); } if (isFrozen) { criteriaQuery.where(criteriaBuilder.or(criteriaBuilder.equal(root.get("isFrozen"), isFrozen))); }*/
一句很简单的查询sql,就是下面的效果。本人注释掉的代码哪里错了啊?
select …………where isFrozen=:isFrozen or status in :status
解决方案
40
if (CollectionUtils.isNotEmpty(statuses)) {
criteriaQuery.where(criteriaBuilder.in(root.get(“status”).value(statuses));
}
if (isFrozen) {
criteriaQuery.where(criteriaBuilder.equal(root.get(“isFrozen”), isFrozen));
没用过这个查询,但感觉是不是多了个criteriaBuilder.or了
criteriaQuery.where(criteriaBuilder.in(root.get(“status”).value(statuses));
}
if (isFrozen) {
criteriaQuery.where(criteriaBuilder.equal(root.get(“isFrozen”), isFrozen));
没用过这个查询,但感觉是不是多了个criteriaBuilder.or了