指定lazy = "true"
和使用fetch = "select" or "join"
有什么区别?哪一个优于另一个?
问候 jayendra
答案 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
。