FetchType.LAZY 在 Parent 的@OneToMany 上,FetchType.EAGER 在 Child 的@ManyToOne 上
FetchType.LAZY on Parent's @OneToMany and FetchType.EAGER on Child's @ManyToOne
我有以下型号:
public class Parent {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "parent",
orphanRemoval = true)
@Fetch(FetchMode.SELECT)
private List<Child> children = new ArrayList<Child>();
}
public class Child {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parent_id")
private Parent parent;
}
这是 FetchType
的正确用法吗?
我可以在 Parent 上使用 FetchType.LAZY
,但在 Child object 上使用 FetchType.EAGER
吗?
将 Child 的 FetchType
也设置为 FetchType.LAZY
有什么影响?
没关系。您可以在关系的每个部分设置不同的提取类型。
如果您在子实体中设置 FetchType.LAZY,当您获得子实体时,您将不会直接获得父实体的实例,除非您在托管上下文中导航关系。
我有以下型号:
public class Parent {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "parent",
orphanRemoval = true)
@Fetch(FetchMode.SELECT)
private List<Child> children = new ArrayList<Child>();
}
public class Child {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parent_id")
private Parent parent;
}
这是 FetchType
的正确用法吗?
我可以在 Parent 上使用 FetchType.LAZY
,但在 Child object 上使用 FetchType.EAGER
吗?
将 Child 的 FetchType
也设置为 FetchType.LAZY
有什么影响?
没关系。您可以在关系的每个部分设置不同的提取类型。
如果您在子实体中设置 FetchType.LAZY,当您获得子实体时,您将不会直接获得父实体的实例,除非您在托管上下文中导航关系。