JPQL 不在 id 列表中
JPQL NOT IN id list
我有 class A 和 class B。
class A {
List<B> bs;
}
class B {
Integer id;
}
我必须编写 JPQL 查询,它将 select 全部为,除了 B 和一些 id;
我正在尝试执行以下操作:
@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)
这是解决您的问题的一种非常简单的方法。实际上,我们 select A 中的所有元素,其中(这里我们查找 ID 为 "param" 的 b 并且我们确保找到的元素不在 a.bs 中) "OR"这里也很重要,因为当没有 b 和 id 时,A 中的元素必须 selected 而 or 的第一部分是不够的。
我有 class A 和 class B。
class A {
List<B> bs;
}
class B {
Integer id;
}
我必须编写 JPQL 查询,它将 select 全部为,除了 B 和一些 id;
我正在尝试执行以下操作:
@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)
这是解决您的问题的一种非常简单的方法。实际上,我们 select A 中的所有元素,其中(这里我们查找 ID 为 "param" 的 b 并且我们确保找到的元素不在 a.bs 中) "OR"这里也很重要,因为当没有 b 和 id 时,A 中的元素必须 selected 而 or 的第一部分是不够的。