Hibernate/JPA:如何强制隐式连接使用LEFT OUTER JOINS

Dan*_*use 14 hibernate jpa hql outer-join jql

有一个类与类Offer可选的关系Article.因此,某些商品物品属性具有null价值.

如果我使用以下声明,一切正常.我得到了所有的报价,甚至那些没有文章的报价.

SELECT o FROM Offer o 
         LEFT OUTER JOIN o.article a 
         LEFT OUTER JOIN o.vendor v 
         WHERE v.number = '0212' OR a.nummer = '123456'
Run Code Online (Sandbox Code Playgroud)

如果我将声明更改为:

SELECT o FROM Offer o 
         LEFT OUTER JOIN o.article a 
         LEFT OUTER JOIN o.vendor v 
         WHERE v.number = '0212' OR o.article.nummer = '123456'
Run Code Online (Sandbox Code Playgroud)

我只得到这些提供不同的文章NULL.这是因为隐式连接(o.article.nummer)的表示法强制内连接.

是否有可能强制左外连接为隐式连接(注释驱动或其他)?如果有可能我可以使用这样的简短形式:

SELECT o FROM Offer o 
         WHERE v.number = '0212' OR o.article.nummer = '123456'
Run Code Online (Sandbox Code Playgroud)

duk*_*ash 5

您可以尝试放置@Fetch(FetchMode.JOIN)Article 属性。然而,这是一个 Hibernate 注释。

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

//...

@ManyToOne
@Fetch(FetchMode.JOIN)
Article article;
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这应该如何解决这个问题。AFAIK Fetchmode 仅指定如何获取数据以初始化内存中的对象,而不指定如何在查询中进行连接。 (2认同)