Ho riscontrato problemi con Hibernate EntityManager 3.5.3-Finale quando si tratta di predicati compositi.Criteri JPA 2.0 e raggruppamento di predicati
Esempio (non reale frammento di codice, ma l'idea deve essere chiaro):
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));
Ora, mi sarei aspettato qualcosa di simile:
SELECT ... FROM ... WHERE (expression1 AND expression2) OR (expression3 AND expression4)
Tuttavia io alla fine con:
SELECT ... FROM ... WHERE expression1 AND expression2 OR expression3 AND expression4
Sto facendo qualcosa di terribilmente sbagliato o è un problema di ibernazione?
È un peccato che il raggruppamento non sia più esplicito, ma per quanto riguarda il risultato finale, naturalmente, il tuo è giusto. – jarekrozanski
Hai ragione, il raggruppamento esplicito sarebbe molto meglio. –