How would I achieve this using Hibernate Restrictions?
(((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z')))
The Criteria interface makes it easy to selectively fetch the data on the basis of conditions in the select query. The Restriction class in hibernate provide several methods that can be used as conditions (also known as Criterion). These conditions are added to a criteria object with the add() method.
Restrictions with CriteriaCriteria cr = session. createCriteria(Employee. class); Criterion salary = Restrictions.gt("salary", 2000); Criterion name = Restrictions. ilike("firstNname","zara%"); // To get records matching with OR conditions LogicalExpression orExp = Restrictions.or(salary, name); cr.
think works
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));
For the new Criteria since version 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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With