Code Bye

请帮本人看一下,这句jpa查询应该怎么样分成2段

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了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明请帮本人看一下,这句jpa查询应该怎么样分成2段