2017-07-18 34 views
0

我正在寫一個JPQL查詢,它基於分類集合進行查詢。我的類別可以爲空,因此我正在檢查使用:categories = NULL。當類別爲NULL在JPQL查詢中檢查集合上的NULL?

@Query("Select v from Vendor v join v.org vorg join v.categories cats WHERE vorg.email =:email AND (cats in :categories or :categories = NULL)") 
Set<Vendor> filterVendors(@Param("emailId") String emailId, @Param("categories") Set<Category> categories); 

以上優良工程。然而,當類別爲多個值出現錯誤

值java.sql.SQLException:操作數應包含1列(S)

而且休眠相關痕跡

category6_.category_id在( ?,? ) 或( ?,? )爲空 )

如何檢查JPQL集合上的空值?我認爲解決這個問題應該可以解決這個錯誤。任何幫助讚賞

謝謝。

+0

1-什麼是vorg.email vorg不是別名。 2-:電子郵件和@參數定義爲名稱「emailId」 – Zeromus

+0

有一個小的錯字。現在糾正它,現在希望很明確。謝謝。 – HopeKing

回答

0
Select v from Vendor v join v.categories cats WHERE vorg.email =:email AND (cats in :categories or cats IS EMPTY) 

可以使用IS [NOT] EMPTY操作來測試空的集合。 JPA不一定帶回一個NULL集合。想想看,DB返回一個空集合。

哦,我修復了你的查詢(儘管我沒有測試它)。

+0

我正在測試上述輸出,並在集合發送爲空時收到一些SQL語法錯誤。我很好奇,你爲什麼測試貓是空的?我們不應該檢查參數類爲空嗎? – HopeKing

+0

因爲'cat'已經被聲明並被分配給'v.categories'。 –

+0

對不起,您的建議嘗試了很多,但它不起作用。 – HopeKing