指定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/