EclipseLink Fech Join没有子节点时返回空结果

时间:2014-03-15 15:27:58

标签: sql jpa eclipselink java-ee-7

我有两个表,父母和孩子,当然父母可以有很多孩子。

使用JPA和Eclipselink,我希望在一次请求中获得父母及其所有孩子。

我尝试了这样的提示:

@NamedQuery(name = "Parent.findWithChildren", query = "SELECT m FROM Parent m WHERE m.id=:id",
        hints = {
            @QueryHint(name = QueryHints.FETCH, value = "m.childList"),
        }
)

哪个效果很好,并产生一个请求以获取所有内容。 该请求类似于:

 SELECT * FROM parent, child where ....

您看,没有明确的“加入”关键字。

但是,如果父级还没有子级,则它根本不返回父级,而是返回并返回空结果。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

The documentation解释了一切:

  

这使用INNER连接并将过滤空值或空值,请参阅外部连接的LEFT_FETCH。

因此,使用LEFT_FETCH或更好地使用标准的JPQL查询,它不需要任何专有的查询提示:

select m from Parent m left join fetch m.childList where m.id = :id