Критерии JPA 2.0 и группировка Предикатов

Я встречаюсь, проблема с В спящем режиме EntityManager, С 3.5.3 финалом когда дело доходит до составных предикатов.

Пример (не фактический фрагмент кода, но идея должен быть ясным):

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));

Теперь, я ожидал бы что-то как:

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

Однако я заканчиваю с:

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

Я делаю что-то ужасно неправильно или являюсь этим, в спящем режиме проблема?

7
задан Pascal Thivent 3 August 2010 в 04:53
поделиться

1 ответ

Согласно спецификации SQL, оба оператора означают одно и то же. Не имеет значения, содержит ли оператор () или нет, поэтому Hibernate их не использует. Порядок приоритета такой, как 1 + 2 * 3 совпадает с 1+ (2 * 3).

6
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: