12

複合述語に関しては、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

私はひどく間違ったことをしていますか、それとも休止状態の問題ですか?

4

1 に答える 1

9

SQL 仕様によると、両方のステートメントは同じことを意味します。ステートメントに () が含まれているかどうかは問題ではないため、Hibernate はそれらを使用しません。優先順位は次のようになります。1+2*3 は 1+(2*3) と同じです。

于 2010-08-01T22:17:01.443 に答える