嵌套'或'限制'和'一个导致意外结果

时间:2015-06-30 16:13:24

标签: hibernate-criteria

我对Criteria 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:Hibernate核心4.3.4.Final

1 个答案:

答案 0 :(得分:0)

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

因此,解决问题的方法是记录实际请求(例如,在sessionFactoryBean中使用属性“show_sql”并将log4j.logger.org.hibernate.sql设置为TRACE级别。)