我有A类和B类。
class A {
List<B> bs;
}
class B {
Integer id;
}
我必须编写 JPQL 查询,该查询将选择所有 as,除了具有带有某些 id 的 B;
我正在尝试执行以下操作:
@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")
但这对我不起作用。
你可以试试:
SELECT a FROM A a
WHERE NOT EXISTS (SELECT b FROM a.bs b WHERE b.id=:bId)
你可以这样做
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"也很重要,因为当 id 没有 b 时,必须选择 A 中的元素,而 or 的第一部分不足以做到这一点。