Spring数据一对多双向映射

Spring data one to many mapping bi-directional

我正在使用遗留系统,必须实现一些类似于以下问题的功能。 表是经理和部门,其中一名经理可以有多个部门,但一个部门确实只有一名经理。

经理

部门

那些 table 没有外键或其他约束。

我的实现是, 一对多双向,因为我在 table 部门也有 manager_id。

我的代码片段:

    @Entity
    @Table(name = "Manager_T")
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class Manager {
        @Id
        @SequenceGenerator(name = "manager_id", sequenceName = "manager_id", allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "manager_id")
        @Column(name="manager_id")
        private Long managerId;

        @Column(name="manager_name")
        private String managerName;

        @OneToMany(mappedBy = "managers", cascade = CascadeType.ALL)
        @JsonManagedReference
        private Set<Department> departments;

}

部门实体:

    @Entity
    @Table(name="Department_T")
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class Department {

        @Id
        @SequenceGenerator(name = "dept_id", sequenceName = "dept_id", allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dept_id")
        @Column(name="dept_id")
        private Long deptId;

        @Column(name="dept_name")
        private String deptName;

        // Only those departments for which manager exists.
        @ManyToOne(optional=false)
        @JoinColumn(name="manager_id")
        @JsonBackReference
        private Manager manager;

}

输出:对于 ManagerController。

注意:我的控制器有一些问题,它没有准确传递值,导致了空行为。

在 Manager 中更改部门初始化,分配一个空的 HashSet。

    @OneToMany(mappedBy = "managers", cascade = CascadeType.ALL)
    @JsonManagedReference
    private Set<Department> departments=new HashSet<Department>();