2017-07-18 15 views
0

カテゴリコレクションに基づいてクエリを実行するJPQLクエリを作成しています。私のカテゴリはnullになる可能性がありますので、categories = 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); 

カテゴリがNULLの場合、上記はうまく動作します。カテゴリは複数の値があるときしかし、私はエラーを取得

ます。java.sql.SQLException:オペランドが1列(複数可)

そして、休止状態、関連するトレースを含まなければならないです

又は( ?、?)で

category6_.category_id( ?、? )が ヌルである)

JPQLのコレクションでnullをチェックする方法はありますか?私はそれがこのエラーを解決する必要が解決すると思う。助けを歓迎します

ありがとうございます。

+0

1- vorg.email vorgはエイリアスではありません。 2-:電子メールと@paramが "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

'cats'はすでに宣言されており、' v.categories'に割り当てられています。 –

+0

申し訳ありませんが、あなたの提案に多大な努力をしましたが、うまくいきません。 – HopeKing

関連する問題