【问题标题】:JPA 2.0 Criteria and grouping of PredicatesJPA 2.0 标准和谓词分组
【发布时间】:2011-03-23 21:34:26
【问题描述】:

当涉及到复合谓词时,我遇到了 Hibernate EntityManager 3.5.3-Final 的问题。

示例(不是实际代码sn-p,但思路应该很清楚):

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 jpa orm derby jpa-2.0


    【解决方案1】:

    根据 SQL 规范,两条语句的含义相同。语句是否包含 () 无关紧要,因此 Hibernate 不使用它们。优先顺序是这样的,类似1+2*3就等于1+(2*3)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 2012-08-28
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多