【问题标题】:JPA - left join 2 tables without associationJPA - 左连接 2 个没有关联的表
【发布时间】:2013-12-09 14:27:39
【问题描述】:

我有 2 个表格/实体无关联。 我可以在 JPA 中进行 交叉连接

FROM A as a, B as b WHERE b.col1=a.col1

如何执行左连接?

我想要来自 A 的所有值,并在可能的情况下用 B 值填充它们,并在没有 B 的地方保留 NULL。

不起作用:

FROM A as a LEFT JOIN B as b WHERE b.col1=a.col1

连接的预期路径!

无效路径:'b.col1'

【问题讨论】:

标签: database jpa join entity


【解决方案1】:

显然您现在可以从 Hibernate 5.1 开始执行此操作

【讨论】:

  • 能否请您与我们分享来自 jpa 查询或 Jpa Api 代码的 sn-p
【解决方案2】:

你不能在 JPA 中这样做,只要实体之间没有关系。

解决方案:

  1. 使用原生查询。
  2. 在它们之间添加一个关系(最终是间接的惰性关系)。间接我的意思是: A 知道 PseudoEntity, PseudoEntity 知道 B(但关系所有者是实体 B), B 知道 PseudoEntity。

【讨论】:

    【解决方案3】:

    JPA 可以通过以下查询实现这一点:

    FROM A as a, B as b WHERE b.col1=a.col1 OR b.col1 IS NULL
    

    【讨论】:

    • 这与 LEFT JOIN 不同。假设您有 b.col1=3 而没有 a.col1=3。您的查询不会返回此行,但 LEFT JOIN 会返回它。
    【解决方案4】:

    关于 Dimitri Dewaele 的回答,此查询是 CARTESIAN JOIN。 CARTESIAN JOIN 或 CROSS JOIN 返回来自两个或多个连接表的记录集的笛卡尔积。因此,它等同于 inner join,其中连接条件始终评估为 True 或语句中不存在连接条件。如果您想了解更多相关信息,请点击以下链接: Sql Cartesian Joins

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2018-11-30
      • 2018-04-08
      相关资源
      最近更新 更多