我对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
答案 0 :(得分:0)
所以问题不在于“Criteria”,而在于我对调试工具的过度信任:Criteria确实与第一个解决方案匹配,即在每个生成的限制周围添加括号。 但是当我尝试记录或观察Criteria对象中的条件条目时,一些括号只是没有显示,导致我误解了我的问题。
因此,解决问题的方法是记录实际请求(例如,在sessionFactoryBean中使用属性“show_sql”并将log4j.logger.org.hibernate.sql设置为TRACE级别。)