当前位置: 首页 > 知识库问答 >
问题:

在使用JPA和Hibernate时,JOIN和JOIN FETCH之间有什么区别

荀豪
2023-03-14

请帮助我理解在哪里使用常规连接以及连接在哪里提取。

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

FROM Employee emp
JOIN emp.department dep

而且

FROM Employee emp
JOIN FETCH emp.department dep

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

共有1个答案

徐淳
2023-03-14

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

但是,区别在于:在第一个查询中,您只返回Hibernate的Employes。在第二个查询中,您返回的是Employes和关联的所有部门。

因此,如果您使用第二个查询,您将不需要执行一个新的查询来再次访问数据库以查看每个员工的部门。

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

如果您需要应用一些WHERE条件(您可能需要的条件),我建议阅读此链接:如何将JPQL“join fetch”和“WHERE”子句恰当地表达为JPA2CriteriaQuery?

更新

如果您不使用fetch并且继续返回部门,这是因为您的Employee和Department之间的映射(@OneTomany)是用fetchType.Eage设置的。在这种情况下,任何带有from employee的HQL(带fetch或不带)查询都将带来所有部门。请记住,默认情况下所有映射*ToOne(@ManyToOne@OneToOne)都是EAGER的。

 类似资料:
  • 问题内容: 请帮助我了解在哪里使用常规JOIN和JOIN FETCH。 例如,如果我们有这两个查询 和 它们之间有什么区别吗?如果是,何时使用哪个? 问题答案: 在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。 但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。 因此,如果你使用第二个查询,则无需执行

  • 问题内容: Hibernate中的persist()和merge()有什么区别? 可以创建UPDATE&INSERT查询,例如: 在这种情况下,将生成 查询, 如下所示: 因此方法可以 生成 一个插入和一个更新。 现在: 这是我在数据库中看到的: 现在使用更新记录 这是我在数据库中看到的: 问题答案: JPA规范包含对这些操作的语义的非常精确的描述,比在javadoc中更好: 应用于实体X 的 p

  • 问题内容: 单向关联和双向关联有什么区别? 由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。 这是单向关联 双向关联 区别在于该组是否持有用户的参考。 所以我想知道这是否是唯一的区别?哪个推荐? 问题答案: 主要区别在于,双向关系提供了双向导航访问,因此您无需显式查询即可访问另一侧。此外,它还允许您在两个方向上应用级联选项。 请注意,导航访问并不

  • 问题内容: 但没人回答我的下一个问题。经典的hibernate方法使用和JPA 实现之间有什么区别?我听说此JPA实现使用并像包装器一样工作,这是真的吗? 问题答案: 确实。 JPA只是一个API,允许您从使用的持久层中进行抽象。Hibernate提供了充当接口的实现,它使用与Hibernate 相同的基础方法。 这个想法是,例如,您可以将实现切换到Eclipse Link,而不必更改任何源代码。

  • 问题内容: 我知道JPA 2是一个规范,而Hibernate是ORM的工具。另外,我了解到Hibernate具有比JPA 2更多的功能。但是从实际的角度来看,真正的区别是什么? 我有使用iBatis的经验,现在我想学习Hibernate或JPA2。我拿起Pro JPA2书籍,并且一直指“ JPA提供者”。例如: 如果您认为某个功能应该被标准化,则应该大声疾呼并向您的JPA提供者提出要求 这使我感到

  • 问题内容: 我对不同的Java框架感到非常困惑。我想创建一个Java服务器项目来提供一些Restful Web服务,但是我真的不知道我应该选择哪种框架。JSF,EJB,Hibernate和Spring有什么区别?请帮助我更多地了解它们。 问题答案: 这些是不同层的框架。 JSF 用于视图(Web)层,它是一个像Wicket或Tapestry这样的面向组件的框架(页面的每个部分都是一个组件,都有状态