【问题标题】:JPQL NOT IN id listJPQL 不在 ID 列表中
【发布时间】:2017-01-05 22:50:06
【问题描述】:

我有A班和B班。

class A {
    List<B> bs;
}

class B {
    Integer id;
}

我必须编写 JPQL 查询,它将全部选择为,除了 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")

但这对我不起作用。

【问题讨论】:

  • JPQL 以“SELECT a”开头。
  • 你应该看看“b NOT MEMBER OF ...”
  • @NeilStockton 如果您想选择整个对象则不需要
  • @Query("Select a FROM A a INNER JOIN a.bs b WHERE b.id :bId")
  • 是的,如果您想遵守 JPA 规范,则需要它。忽略它,您的查询是不可移植的。

标签: java hibernate jpa jpql


【解决方案1】:

你可以试试:

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

【讨论】:

    【解决方案2】:

    你可以这样做

    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 中的元素,并且 or 的第一部分还不够。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2020-10-21
      • 2021-08-22
      • 2020-08-24
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多