2011-05-31 27 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