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

Я сталкиваюсь с проблемой с Hibernate EntityManager 3.5.3-Final, когда речь идет о составных предикатах.

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

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

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

7 голосов | спросил jarekrozanski 1 PM00000080000002631 2010, 20:02:26

1 ответ


0

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

ответил Thomas Mueller 2 AM00000020000000131 2010, 02:17:01

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132