2013-01-14 33 views
0

我有一個Item類,它包含一個SetTag對象。現在我想查找所有包含的項目全部所需的標籤與JPA(基於Hibernate 4.1.9)。查找包含某些設置元素的所有項目與JPA QL

我的資料庫方法得到了java.util.Set中,該方法的身體看起來是這樣的:

entityManager.createQuery("select item from Item as item where item.tags in :tags") 
.setParameter("tags", tags) 
.getResultList() 

它看起來像這樣solution給我,但我得到的是錯誤信息:

IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected end of subtree [select item from models.Item as item where item.tags in()]

如果我把病情各地

"select item from Item as item where :tags in item.tags" 

什麼,我認爲會是正確的(而不是上述查詢),我在最後一行得到NullPointerExceptiongetResultList())。

有什麼不對?

+0

如果我表達出來,而不'in'的異常沒有拋出。所以它似乎是一個純粹的JPQL問題。我發佈了另一個[問題](http://stackoverflow.com/questions/14340156/)。 – deamon

回答

0

它看起來像你的tags集合是空的,或者甚至爲空,這已知會導致此錯誤(例如,請參閱this blog)。這會產生你在錯誤看到查詢:

select item from models.Item as item where item.tags in() 

其中,如果發送到數據庫,可能會導致錯誤(例如,ERROR 1064 (42000),在MySQL中,語法錯誤)。

你需要驗證tags是將其作爲參數傳遞給查詢之前,非空。

+0

'tags'不是空的並且包含期望的對象。任何其他想法? – deamon

+1

掛上,'從Item中選擇item作爲item.tags in:tags'我是否認爲一個'item'可能有多個'tags'?如在'WHILE'標籤列表'IN'中另一個標籤列表''? IN通常看起來更像'WHILE'單值(每條記錄)'IN'值列表'。說實話,我真的不特定的,究竟是什麼,這將意味着,但它肯定不是由SQL支持。如果Hibernate實現了一些特殊的邏輯來支持它,我會發現它有點令人驚訝。 – femtoRgon

相關問題