【发布时间】:2011-12-20 12:00:00
【问题描述】:
我有一个实体 Base,与嵌套的实体具有多对一的关系。我想通过 Nested.name 订购查询,其中 name 可以为空。即使名称为空,我也希望查询返回这一行。所以我试图让 EclipseLink 生成将这些 LEFT JOIN 连接在一起的查询,而不是从两个表中进行选择。
我已经用@JoinFetch注解对Base和Nested的关系做了如下注解:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "BASE_ID")
@JoinFetch(value = JoinFetchType.OUTER)
private Nested nested;
但是,这似乎根本不会以任何方式影响 EclipseLink 生成的查询。实际生成的查询是
SELECT ... FROM BASE t0, NESTED t1 WHERE (t1.ID = t0.BASE_ID) ORDER BY t1.NAME ASC...
虽然我期待一些类似的东西
SELECT ... FROM BASE t0 LEFT JOIN NESTED t1 ON (t1.ID = t0.BASE_ID) ORDER BY t1.NAME ASC...
我正在使用 JPA 2.0 Criteria API 来构建和执行查询。即使我使用条件 API 显式构建连接查询,生成的查询也会看起来像第一个,没有连接。在构建查询时显式加入似乎适用于 Hibernate,但对 EclipseLink 中的结果查询没有影响。
我可能在这里遗漏了一些基本的东西,所以欢迎任何提示。
谢谢
【问题讨论】:
标签: java jpa left-join eclipselink