FetchMode和FetchType之间的区别

时间:2014-09-13 09:18:52

标签: hibernate jpa fetch

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

问候 jayendra

2 个答案:

答案 0 :(得分:28)

我们说我们有这样的实体:

@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将使用join自动加载所有child个实体。另一方面,当您提取Child时,Parent实体不会被选中,除非您在代码child.getParent()中明确表示它。

FetchType(Lazy / Eager)告诉我们是否希望在代码调用时急切地或懒惰地加载实体。

FetchMode(选择/加入)告诉我们是否希望我们的权利加载了额外的select或在一个查询中加入或子选择。

答案 1 :(得分:22)

FetchMode :它定义了 how hibernate(使用哪种策略,例如Join,SubQuery等)将从数据库中获取数据。

FetchType :它定义了 whether hibernate将获取数据。

注意FetchMode仅适用于注释时FetchType = EAGER