我有两个表,父母和孩子,当然父母可以有很多孩子。
使用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 ....
您看,没有明确的“加入”关键字。
但是,如果父级还没有子级,则它根本不返回父级,而是返回并返回空结果。我该如何解决这个问题?
答案 0 :(得分:0)
The documentation解释了一切:
这使用INNER连接并将过滤空值或空值,请参阅外部连接的LEFT_FETCH。
因此,使用LEFT_FETCH或更好地使用标准的JPQL查询,它不需要任何专有的查询提示:
select m from Parent m left join fetch m.childList where m.id = :id