我正在尝试对命名查询中的多个表进行左外连接。我需要左外连接,因为并非所有“推车”都有“帽子”和“衬衫”。我已经简化了这个例子。我的模型看起来像这样:
@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。
感谢您的任何帮助。