【问题标题】:Hibernate createQuery remove() in WHERE condition在 WHERE 条件下休眠 createQuery remove()
【发布时间】:2011-05-31 05:32:34
【问题描述】:

假设我有实体 Person。

当我尝试与 hibernate createQuery 一起使用时,它会在 where 条件下删除 ()。示例:

Query query = session.createQuery("FROM Person WHERE name=? OR (id=? AND active=?)");
query.setParameter(1, "Test");
query.setParameter(2, 1);
query.setParameter(3, 1);
// and so on

当我在休眠中打开调试 sql 输出时,它会产生

where person0_.`name`=? or person0_.`id`=? and person0_.`active`=?

因为我把 () 放在 where 条件中,所以输出应该是

where person0_.`name`=? or (person0_.`id`=? and person0_.`active`=?)

为什么要删除 where 条件中的 ()?还是我错过了什么?

谢谢

【问题讨论】:

  • 如果您在 name=? 周围添加几个括号/括号是否有帮助,这样您最终会得到: FROM Person WHERE (name=?) OR (id=? AND active= ?)。只是一个疯狂的猜测......

标签: java hibernate


【解决方案1】:

AND 在 SQL 中的优先级高于 OR,因此这两个语句是等效的。 Hibernate 删除了不必要的括号。

【讨论】:

  • 我认为这是不同的意思。示例:我只想获取(用户名为“admin”的人)或(id=10 且 active=1 的人)。在这种情况下,将允许 2 人。
  • 等等,我认为你是对的......当我尝试另一个 sql 分组时,hibernate 不会删除括号。
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多