1

我正在尝试对命名查询中的多个表进行左外连接。我需要左外连接,因为并非所有“推车”都有“帽子”和“衬衫”。我已经简化了这个例子。我的模型看起来像这样:

@Entity
public class Cart {


  @ManyToOne(targetEntity = Shirt.class, optional = true)
  @JoinColumn(nullable = true, insertable = false, updatable = false)
  private Shirt shirt;

  @ManyToOne(targetEntity = Hat.class, optional = true)
  @JoinColumn(nullable = true, insertable = false, updatable = false)
  private Hat hat;

  ...
}

我的查询如下所示:

<query>
  SELECT
    _cart
  FROM
    Cart _cart
  LEFT JOIN
    _cart.hat _hat
  LEFT JOIN             
    _cart.shirt _shirt
  WHERE
    _hat.size = 's' OR _shirt.color = 'red'
</query>

我遇到的问题是生成的查询是 LEFT JOIN 和 INNER JOIN(两个表都连接了两次)。在手动放入那些左连接之前,我尝试了 @ManyToOne 上的“可选”属性,但它并没有改变连接类型。

我正在使用最新版本的 TomEE 和 OpenJPA。

感谢您的任何帮助。

4

0 回答 0