'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 级别)。
我对标准 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 级别)。