【问题标题】:how to create jpql with left outer join如何使用左外连接创建 jpql
【发布时间】:2014-01-21 12:56:09
【问题描述】:

例如,我有 2 个实体。
一个实体(Mysql 表名="A")
B实体(Mysql表名="B")
我想从 A 表中获取不在 B 表中的数据。
我写了 sql,它正在工作。
SELECT * FROM A 左外连接 B ON A.id = B.a_id B.id 为空的地方

JPQL如何实现?

【问题讨论】:

  • 不知道你在这里问什么。您是否要求在 Java 中获取结果并将结果存储在对象中所需的整个设置?或者如何将该查询转换为可以从实体管理器运行的内容?如果是第二点,那么乍一看它看起来还不错。
  • 是的,我想将它翻译成可以从实体管理器运行的 JPQL。
  • 那么我看不出查询有什么问题。你试过了吗?

标签: java mysql jakarta-ee jpa jpql


【解决方案1】:

如果你有以下某种结构:

Class EntityA
--------
long Id
Set<EntityB> Bs

Class EntityB
-------
long Id
EntityA A

我认为以下应该可行

SELECT a FROM EntityA a WHERE a.Bs IS EMPTY

【讨论】:

    【解决方案2】:
    【解决方案3】:

    你可以使用这个命令

    SELECT * FROM A WHERE A.id NOT IN (SELECT B.id FROM B)

    如果你想只使用加入,请告诉我

    【讨论】:

    • 这是查询不正确。因为,他给了我 A 表中的所有数据,但我需要 A 表中不在 B 表中的数据
    • 这个查询给出了来自“A”的所有信息,其中 ID 不在“B”中。这不是你想要的吗?
    • 嗨!我正在使用 php mysql 你能把这个查询修改成你的平台吗
    • @TomStone 这个查询给了我来自 A 的所有数据(这对我来说也很惊讶......因为我们添加了 NOT IN 条件)
    【解决方案4】:

    我相信以下应该有效:

    SELECT A FROM A a LEFT JOIN a.B b WHERE b.id = null;
    

    这应该在 id 上将 A 与 B 连接起来,在 A 无法与 B 匹配的情况下为空。然后它会从 A 中选择 b.id 为空的行。好像你在找什么。另请查看以下 SO:How to make a JPA query with LEFT OUTER JOIN 如下所示:How to create a JPA query with LEFT OUTER JOIN

    让我知道它是否成功。

    【讨论】:

    • 嗯,JPA 2.1 中有一个 ON 运算符(但在早期版本中没有),但没有“SELECT *”
    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 2018-02-28
    • 2015-03-04
    • 2012-10-25
    • 2015-07-18
    • 2014-11-22
    • 2019-07-12
    • 2013-12-28
    相关资源
    最近更新 更多