【问题标题】:When we using relationship One To Many two side and when we using it one side当我们使用关系一对多的两侧以及当我们使用它的一侧时
【发布时间】:2019-03-24 04:36:20
【问题描述】:

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

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;
}

有两种情况:当我在双方都使用关系注释时(“在两个表 Department 和 Course 上”),具有一对多关系,当我只在一侧使用时(“only table Derpartment)。场景是多对多关系也类似。

我的问题: "fetch = FetchType.EAGER , cascade = CascadeType.ALL" 在上述场景中应该只定义在一侧还是两侧?

【问题讨论】:

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


【解决方案1】:

fetch and cascade 选项可以在两边都定义。如果它仅在一侧定义,则在获取另一侧对象时不会产生任何影响。例如如果为 Department 类中的课程设置了 Eager fetch,但没有在 Course 类中设置,那么如果对部门进行 select 查询,它将连同它一起获取它的所有课程但是如果在 course 上进行 select 查询,它将不会t 获取其关联的部门,除非在查询中明确调用。

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

双向关联很好,但在代码中进行了额外更新以实现高效查询,即use JoinColumn with @ManyToOne association,因此不必在代码端维护两个实体之间的额外关联映射信息。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多