2011-05-31 26 views
0

比方说,我有实体人。Hibernate createQuery remove()在哪里条件

当我尝试使用Hibernate的createQuery使用,它删除()在状态。例如:

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`=?) 

为什么()在哪里条件被删除?还是我想念什么?

谢谢

+0

它是否帮助,如果你加上括号,一对夫妇/ paranthesis各地名=?这样你就结了:从一个人WHERE(?NAME =)或(Id =和积极=?)。只是一个疯狂的猜测,虽然... – sbrattla 2011-05-31 05:39:59

回答

2

AND具有比OR更高的优先级,因此这两个语句是等价的。 Hibernate删除不必要的括号。

+0

我认为这是不同的含义。例如:我只想得到(使用用户名'admin')或者(id = 10且active = 1的人)。在这种情况下,有2人将被允许。 – Jef 2011-05-31 07:13:58

+0

等等,我认为你是对的......当我尝试另一个sql分组时,hibernate不删除括号。 – Jef 2011-05-31 07:29:24