2017-09-03 21 views
0

私は春のデータを使用しています...そして、私はManyToMany関係のエンティティを持っています。JPQLコレクションのコレクション内の句

だから私は、要求のこのような行いたい:

@Query("SELECT d FROM Data d WHERE ((?2) IS NULL OR d.categories IN (?2))") 

?2がリストに対応し、categoriesDataから(別のエンティティの)リストです。

しかし、これはうまくいかない...どんな考えですか? :)

PS:あなたは2つのクエリを使用する必要があります

@Query("SELECT r FROM Data r WHERE (?3 = 0L OR ?3 = (SELECT COUNT(cate.id) FROM Data r2 JOIN r2.categories cate WHERE r.id = r2.id AND cate IN ?2))") 

しかし、それは休止状態によって生成された安っぽい要求だと私が望む正確に何ではありません...

答えて

0

これは

@Query("SELECT DISTINCT(d) FROM Data d JOIN d.categories c 
WHERE (COALESCE(?2, NULL) IS NULL OR c.id IN (?2))") 
  1. を動作するかを参照してくださいここで私は、idは、カテゴリテーブルの主キーフィールドであると仮定しています。あなたのケースに応じて変更することができます。
  2. ここでは、パラメータとしてカテゴリIDのリストを渡します。

上記のクエリは、?2がnullの場合は、データテーブルからすべてのレコードを取得します。その他の場合は、?2として渡すカテゴリIDのリストに基づいてフィルタリングします。

+0

@JMA上記のコードをテストしましたが、JPA 2.1 – muasif80

+0

Thxで答えていますが、今は複雑さを増す必要があります。実際、JpaSort.unsafeで春に動的に「順序付け」を使用しています。私は計算された値(例:SIZE(d.saws)はd.sawsもコレクションです)でソートする必要があるので、安全でないメソッドを使用してください。 – JMA

0

:私は解決策を参照してください。すべてのデータを取得するためにパラメータが空の場合に使用し、フィルタされたデータを取得するためにパラメータが空でない場合に使用します。

+0

@クエリー(「データから選択したものはどこにもありません) – JMA

+0

'(?2)'は '?2'のようにしてはいけませんか? 2? – alirabiee

+0

それはその例だからです...それは私のコードではありません:) ^^ – JMA

0

私は複雑さをよりよく分割する必要があると思います。 Javaヘルプがあります:containstAll()メソッドはあなたを助けませんか?

P.S:Hibernateは(?2) IS NULLを理解していて、うまく機能しますか?

+0

ええ、それは仕事です:)私はパフォーマンスに優れているので、データベースへの操作の複雑さを実行することをwan'tしません。 – JMA

関連する問題