2013-02-27 39 views
5

我有一個JPQL命名查詢,需要List作爲參數。我使用在IN短語參數:是否可以通過並測試JPA中的空列表?

...WHERE x.id IN :list 

我想這樣做以下但語法顯然不會讓我:

...WHERE :list IS EMPTY OR x.id IN :list 

也不會:

...WHERE SIZE(:list) = 0 OR x.id IN :list 

是我想在JPA 2.0命名查詢中不可能做什麼?我知道如何通過標準API或使用普通的舊JPQL字符串來完成。

回答

-2

你在查詢中試圖做什麼似乎是沒有意義的。您試圖使用參數的狀態來限制查詢結果。但是你不會將這個參數與你選擇的任何東西進行比較。

想想這個查詢(它沒有意義):

SELECT * FROM SOMETABLE WHERE :list IS EMPTY 

所以,我認爲你需要檢查:列表是空的兩種不同的查詢之間進行選擇之前:

如果:list不空:...WHERE x.id IN :list

如果:list爲空:(NO WHERE CLAUSE AT ALL)

+0

你的完全正確路線。我希望將代碼中的條件移入查詢本身,但JPQL BNF不支持這種情況。 – 2013-02-27 17:18:16

+2

我會在我微弱的辯護中提供以下種類的SQL(而不是JPQL)在生成的場景中經常出現:'SELECT x FROM y WHERE 1 = 1;'(例如,組裝WHERE條款有時會確保'1 = 1'在'WHERE'子句中,所以動態程序集不需要做你所說的那種if/then邏輯。話雖如此,我認爲我不能在JPQL中脫身。謝謝。 – 2013-02-27 17:19:58

相關問題