【问题标题】:How to make a LEFT JOIN on a one-sided relation between two tables in HQL?如何在 HQL 中的两个表之间的单向关系上进行 LEFT JOIN?
【发布时间】:2016-07-08 08:52:14
【问题描述】:

标题是明确的,所以这里是详细信息:我有两个表,A 和 B。B 引用了 A,但反之则不正确。在 SQL 中它并没有真正改变任何东西,但在 HQL 中我不知道该怎么做:

A LEFT JOIN B ON 条件

我试过了:

A a LEFT JOIN B b JOIN b.A ba WITH a.id = ba.id

--> QuerySyntaxException:连接的路径!

A a LEFT JOIN B b WITH a.id = b.A.id

--> QuerySyntaxException:连接的路径!

我没有得到路径异常,因为我总是给一个别名。我想我在做一些没有意义的事情,或者很可能是因为我需要做 A a LEFT JOIN a.B,但我不能......(我试过 B b RIGHT JOIN b.A。它有效,但结果当然不是我需要的)

我也尝试不使用 WITH 子句,因为条件在 FK 上,但没有更多成功。

如果你有任何想法,请,我在听!

谢谢。

【问题讨论】:

    标签: sql hibernate join left-join hql


    【解决方案1】:

    首先,要执行此类临时连接,您至少需要 Hibernate 5.1。 JPA 仍然不支持这种东西。

    尝试使用这个查询

    class A {
    
      @Id
      private Long pid;
    
    }
    
    class B {
    
      @Id
      private Long pid;
    
      @OneToOne
      @JoinColumn
      private A refToA; 
    
    }
    
    from A a left join B b on a.pid = b.refToA.pid
    

    【讨论】:

    • 谢谢,但它与我尝试的第二个示例有何不同?我的休眠版本是 3.2.2
    • @Flyout 你不能用 Hibernate 3 做这个A a LEFT JOIN B b。你需要在A 中引用B。
    • 好吧,这就是我的猜测,但我不知道这是因为版本。谢谢,我会尝试寻找其他解决方案。
    • @Flyout 您可以尝试使用笛卡尔积。但这将是一个内部连接。您需要使用union 来模拟left outer join。但是不知道能不能和HQL一起使用。
    • 是的,我想知道如何进行左外连接以将结果添加到内连接!谢谢我不知道如果可能的话我会看看工会。
    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2019-08-12
    • 2021-12-07
    • 2018-10-03
    • 2011-12-14
    • 2011-06-08
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多