当我们使用关系一二多二时,以及当我们使用它时,一面

时间:2019-03-24 04:36:21

标签: java jpa java-8 spring-data-jpa

我已经阅读了一些描述双方两个实体之间关系的代码,如下所示:

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”

1 个答案:

答案 0 :(得分:1)

fetch and cascade选项可以在两侧定义。如果仅在一侧定义它,则在获取另一侧对象时不会有任何影响。例如如果在部门课程中为课程设置了紧急获取,但在课程课程中未设置为获取,则如果对部门进行选择查询,则它将随同获取所有课程,但是如果对课程进行选择查询,则不会。除非在查询中明确调用,否则请获取其关联部门。

级联选项相同。因此,它在任一侧的定义都取决于需要进行的查询的类型。如果对部门的查询很多,每次都需要所有课程的信息,但是获取课程的信息却不相同,则只能在部门的课程中定义获取选项。

双向关联是很好的方法,但是您可以在代码中进行额外的更新以进行有效的查询,例如use JoinColumn with @ManyToOne association,这样就不必在代码端维护两个实体之间的其他关联映射信息。