2017-01-04 3 views
0

私は、クラスAとクラスBを持ってJPQLませ

class A { 
    List<B> bs; 
} 

class B { 
    Integer id; 
} 
私はいくつかのIDを持つこと持っBを除いて、として、すべてを選択しますJPQLクエリを記述する必要があり

私は、次の操作を実行しようとしています:

@Query("FROM A a INNER JOIN a.bs b WHERE b NOT IN (FROM B WHERE id = :bId)") 

または

@Query("FROM A a INNER JOIN a.bs b WITH b.id != :bId") 

しかし、それは私のために動作しません。

+0

JPQLは「SELECT a」で始まります。 –

+0

"b NOT MEMBER OF ..."を参照する必要があります –

+0

@NeilStocktonは、オブジェクト全体を選択したい場合には不要です。 – Squeez

答えて

1

あなたは試すことができます:

SELECT a FROM A a 
WHERE NOT EXISTS (SELECT b FROM a.bs b WHERE b.id=:bId) 
+0

ありがとうございます。それは動作します! – Squeez

0

あなたは、これはあなたの問題を解決するための非常に単純な方法である。この

SELECT a FROM A a WHERE ((SELECT b FROM B b WHERE b.id=:param) NOT MEMBER OF a.bs OR (SELECT b FROM B b WHERE b.id=:param)IS NULL)

を行うことができます。実際には、Aのすべての要素を選択します(ここでは、idが "param"でbを探し、見つかった要素がa.bsにないことを確認します)。ここで "OR"も重要です。なぜなら、b idの場合、Aの要素を選択しなければならず、または要素の最初の部分が十分ではありません。