使用JPA和Hibernate时JOIN和JOIN FETCH有什么区别
请帮助我了解在哪里使用常规JOIN和JOIN FETCH。
例如,如果我们有这两个查询
FROM Employee empJOIN emp.department dep
和
FROM Employee empJOIN FETCH emp.department dep
它们之间有什么区别吗?如果是,何时使用哪个?
回答:
在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。
但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。
因此,如果你使用第二个查询,则无需执行新查询即可再次命中数据库以查看每个员工的部门。
当你确定需要每个员工的部门时,可以使用第二个查询。如果不需要部门,请使用第一个查询。
如果你需要应用一些WHERE条件(你可能需要),我建议你阅读此链接:如何正确地将JPQL“ join fetch”和“ where”子句表示为JPA 2 CriteriaQuery?
更新资料
如果你不使用,fetch
并且继续返回部门,那是因为你在雇员和部门(a @OneToMany
)之间的映射设置为FetchType.EAGER
。在这种情况下,任何带有fetch
或不带有HQL的查询FROM Employee
都会带到所有部门。请记住,默认情况下所有映射* ToOne(@ManyToOne
和@OneToOne
)均为EAGER。
以上是 使用JPA和Hibernate时JOIN和JOIN FETCH有什么区别 的全部内容, 来源链接: utcz.com/qa/430107.html