2013-09-27 86 views
0

我有以下休眠HQL查詢:Hibernate與空List進行比較?

def query = 
""" 
select i from Item 
where i not in :someItemList 
""" 

def items = Item.executeQuery(query, [someItemList: someItemList]) 

在我的查詢someItemList是項目對象的列表。如果someItemList不是空的,這個查詢工作正常。如果列表爲空,Hibernate會引發異常。

有沒有辦法修改這個查詢,它也適用於空的someItemList?

+0

你能告訴你如何使用它? –

+0

此外,請參閱:http://stackoverflow.com/questions/8450400/hql-where-in-for-empty-list-crashes –

+0

你有沒有試過:'...和計數(:someItemList)> 0'? –

回答

2
def someItemList = ['Example'] //empty in cases  

def query = 
""" 
select i from Item ${someItemList ? ' where i not in (:someItemList)' : ''} 
""" 

def items = someItemList ? Item.executeQuery(query, [someItemList: someItemList]) 
         : Item.executeQuery(query) 

//or try 
def items = Item.executeQuery(query, 
          someItemList ? [someItemList:someItemList] : [:])  

使用的GString。

+0

我得到錯誤:參數someItemList不存在作爲查詢中的命名參數,以防someItemList爲空。如何解決這個問題? – confile

+1

同樣適用於查詢,請參閱更新。沒有那麼多幹。如果在另一個答案中顯示「if」塊,它會更簡單。 @confile – dmahapatro

2

只需在創建查詢之前驗證列表是否爲空。

if (someItemList.isEmpty()) { 
    select i from Item //your query 
} else { 
    select i from Item 
    where i not in :someItemList //your query here 
} 
+0

它也可以在HQL查詢中完成嗎? – confile

+0

據我所知,如果你試圖按照你的想法使用查詢,當列表爲空時,它總是會抱怨。我之前有這個問題,我已經通過在創建查詢之前檢查空來解決它... – John