'and' 中的嵌套 'or' 限制导致意外结果

Nested 'or' restriction in 'and' one leading in unexpected result

我对标准 API 如何构建最终查询感到很困惑。 这是一些代码:

someCriteria.add(
    Restrictions.and(
        Restrictions.or(Restrictions.gt(a,b),Restrictions.isNull(a)),
        Restrictions.ge(d,e)
    )

我期待

SELECT.. FROM... 
WHERE (A > B or A IS NULL) AND (D > E) 

但是当我检查我的标准条目时,我看到的是:

SELECT.. FROM... 
WHERE A > B or A IS NULL AND D > E

从而导致意想不到的结果。

我很确定我可以重写查询,这样它就不再是问题了,但是由于我要开发的应用程序是基于这样的查询,所以我需要了解这个问题。

所以,任何人都可以解释为什么我没有在 "Restrictions.or(...)"?

生成的查询部分周围得到预期的括号

提前致谢。

PS : 休眠核心 4.3.4.Final

所以问题不在于 "Criteria",而是我对调试工具的过度信任:标准确实匹配第一个解决方案,即在每个生成的限制周围添加括号。 但是当我尝试记录或查看 Criteria 对象中的标准条目时,一些括号没有显示,导致我误解了我的问题。

所以理解问题的解决方案是记录实际请求(例如在 sessionFactoryBean 中使用 属性 "show_sql" 并将 log4j.logger.org.hibernate.sql 设置为 TRACE 级别)。