小编典典

使用JPA和Hibernate时JOIN和JOIN FETCH有什么区别

java

请帮助我了解在哪里使用常规JOIN和JOIN FETCH。

例如,如果我们有这两个查询

FROM Employee emp
JOIN emp.department dep

FROM Employee emp
JOIN FETCH emp.department dep

它们之间有什么区别吗?如果是,何时使用哪个?


阅读 1011

收藏
2020-03-16

共1个答案

小编典典

在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。

但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。

因此,如果你使用第二个查询,则无需执行新查询即可再次命中数据库以查看每个员工的部门。

当你确定需要每个员工的部门时,可以使用第二个查询。如果不需要部门,请使用第一个查询。

如果你需要应用一些WHERE条件(你可能需要),我建议你阅读此链接:如何正确地将JPQL“ join fetch”和“ where”子句表示为JPA 2 CriteriaQuery?

更新资料

如果你不使用,fetch并且继续返回部门,那是因为你在雇员和部门(a @OneToMany)之间的映射设置为FetchType.EAGER。在这种情况下,任何带有fetch或不带有HQL的查询FROM Employee都会带到所有部门。请记住,默认情况下所有映射* ToOne(@ManyToOne@OneToOne)均为EAGER。

2020-03-16