我已经阅读了一些描述双方两个实体之间关系的代码,如下所示:
public class Department {
@OneToMany(mappedBy = "department",fetch = FetchType.EAGER , cascade = CascadeType.ALL)
private List<Course> courses = new ArrayList<>();
}
public class Course {
@ManyToOne
private Department department;
}
有两种情况:当我在具有一对多关系的两面都使用关系注释时(“在表部门和课程两方都使用”),而当我仅在一侧使用关系注解(“仅表部门”时)。多对多关系也是如此。
我的问题:在上述情况下,应该只在一侧还是两侧定义“ fetch = FetchType.EAGER,级联= CascadeType.ALL” ?
答案 0 :(得分:1)
fetch and cascade
选项可以在两侧定义。如果仅在一侧定义它,则在获取另一侧对象时不会有任何影响。例如如果在部门课程中为课程设置了紧急获取,但在课程课程中未设置为获取,则如果对部门进行选择查询,则它将随同获取所有课程,但是如果对课程进行选择查询,则不会。除非在查询中明确调用,否则请获取其关联部门。
级联选项相同。因此,它在任一侧的定义都取决于需要进行的查询的类型。如果对部门的查询很多,每次都需要所有课程的信息,但是获取课程的信息却不相同,则只能在部门的课程中定义获取选项。
双向关联是很好的方法,但是您可以在代码中进行额外的更新以进行有效的查询,例如use JoinColumn with @ManyToOne association
,这样就不必在代码端维护两个实体之间的其他关联映射信息。