JPA 2.0 Criteria and predicate grouping

I am facing a problem with Hibernate EntityManager 3.5.3-Final when it comes to compound predicates.

Example (not the actual code snippet, but the idea should be clear):

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); Predicate predicate1 = criteriaBuilder.conjunction(); Predicate predicate2 = criteriaBuilder.conjunction(); // These are Boolean expression with common Root predicate1.getExpressions().add(expression1); predicate1.getExpressions().add(expression2); predicate2.getExpressions().add(expression3); predicate2.getExpressions().add(expression4); //... query.where(criteriaBuilder.or(predicate1, predicate2)); 

Now I would expect something like:

 SELECT ... FROM ... WHERE (expression1 AND expression2) OR (expression3 AND expression4) 

However, in the end I get:

 SELECT ... FROM ... WHERE expression1 AND expression2 OR expression3 AND expression4 

Am I doing something terribly wrong or is it a sleep issue?

+6
derby orm hibernate jpa
source share
1 answer

According to the SQL specification, both expressions mean the same thing. It doesn't matter if the operator contains () or not, so Hibernate does not use them. The priority order is similar to this, similar to 1 + 2 * 3, same as 1+ (2 * 3).

+6
source share

All Articles