一尘不染

FetchMode和FetchType之间的区别

hibernate

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

问候贾恩德拉


阅读 483

收藏
2020-06-20

共1个答案

一尘不染

假设我们有这样的实体:

@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急切地加载所有实体。另一方面,当您提取时ChildParent除非您在代码中显式调用实体,否则不会选择实体child.getParent()

FetchType(Lazy / Eager)告诉我们,当代码中有调用时,我们是希望实体加载还是延迟加载。

FetchMode(Select / Join)告诉我们是要向我们的实体加载其他选择还是在一个查询中使用join或subselect加载。

2020-06-20