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