hibernate - FetchMode 和 FetchType 的区别

标签 hibernate jpa fetch

指定lazy = "true"有什么区别并使用 fetch = "select" or "join" ?哪个比另一个更受欢迎?

问候
贾延德拉

最佳答案

假设我们有这样的实体:

@Entity
@Table
public class Parent {
    @Id
    private Long id;

    @OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
    @Fetch(FetchMode.JOIN)
    private List<Child> child;    
    //getter setters
}


@Entity
@Table
public class Child {    
    @Id
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    private Parent parent;

    //getter setter
}

在上面的例子中,当得到 Parent实体,hibernate 会自动加载所有 child实体急切地使用 join。另一方面,当您获取 Child 时, Parent除非您在代码中明确调用实体,否则不会选择实体 child.getParent() .

FetchType (Lazy/Eager) 告诉我们在代码调用时我们是希望实体加载急切还是延迟加载。

FetchMode (Select/Join) 告诉我们是希望我们的实体加载额外的选择还是在一个查询中加载连接或子选择。

关于hibernate - FetchMode 和 FetchType 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821718/

相关文章:

java - 具有多个 Java 应用程序的 Hibernate 数据库完整性

java - 在 Spring 启动期间执行 native SQL 查询

hibernate - Grails中没有默认值异常

spring - 事务不适用于 Spring 3.1 – H2 – junit 4– hibernate 3.2

java - JPA Hibernate更新界面中的查询

java - JPA Criteria 查询计数结果涉及连接

reactjs - React - 在获取数据并使用该数据设置状态后如何清理 useEffect()?

jpa - 将 Spring Data 查询构建器与 Spring Data JPA 规范相结合?

ReactJS redux saga 获取 api

reactjs - 在开发期间从 Create React App 中的本地主机服务器获取与在生产期间从部署获取