Hibernate Criteria Restrictions AND / OR combination

前端 未结 2 1859
Happy的楠姐
Happy的楠姐 2020-11-30 19:50

How would I achieve this using Hibernate Restrictions?

(((A=\'X\') and (B in(\'X\',Y))) or ((A=\'Y\') and (B=\'Z\')))
2条回答
  •  爱一瞬间的悲伤
    2020-11-30 20:19

    For the new Criteria since version Hibernate 5.2:

    CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
    CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(SomeClass.class);
    
    Root root = criteriaQuery.from(SomeClass.class);
    
    Path expressionA = root.get("A");
    Path expressionB = root.get("B");
    
    Predicate predicateAEqualX = criteriaBuilder.equal(expressionA, "X");
    Predicate predicateBInXY = expressionB.in("X",Y);
    Predicate predicateLeft = criteriaBuilder.and(predicateAEqualX, predicateBInXY);
    
    Predicate predicateAEqualY = criteriaBuilder.equal(expressionA, Y);
    Predicate predicateBEqualZ = criteriaBuilder.equal(expressionB, "Z");
    Predicate predicateRight = criteriaBuilder.and(predicateAEqualY, predicateBEqualZ);
    
    Predicate predicateResult = criteriaBuilder.or(predicateLeft, predicateRight);
    
    criteriaQuery
            .select(root)
            .where(predicateResult);
    
    List list = getSession()
            .createQuery(criteriaQuery)
            .getResultList();  
    
        

    提交回复
    热议问题