【问题标题】:Hibernate Criteria Restrictions AND / OR combinationHibernate Criteria Restrictions AND / OR 组合
【发布时间】:2011-12-28 22:06:52
【问题描述】:

如何使用 Hibernate Restrictions 来实现这一点?

(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z')))

【问题讨论】:

    标签: hibernate criteria hibernate-criteria restrictions


    【解决方案1】:

    认为有效

    Criteria criteria = getSession().createCriteria(clazz); 
    Criterion rest1= Restrictions.and(Restrictions.eq(A, "X"), 
               Restrictions.in("B", Arrays.asList("X",Y)));
    Criterion rest2= Restrictions.and(Restrictions.eq(A, "Y"), 
               Restrictions.eq(B, "Z"));
    criteria.add(Restrictions.or(rest1, rest2));
    

    【讨论】:

      【解决方案2】:

      对于自 Hibernate 5.2 版本以来的新标准:

      CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
      CriteriaQuery<SomeClass> criteriaQuery = criteriaBuilder.createQuery(SomeClass.class);
      
      Root<SomeClass> root = criteriaQuery.from(SomeClass.class);
      
      Path<Object> expressionA = root.get("A");
      Path<Object> 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<SomeClass> list = getSession()
              .createQuery(criteriaQuery)
              .getResultList();  
      

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2018-06-03
        • 1970-01-01
        • 2018-03-02
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多