繁体   English   中英

Spring数据一对多映射双向

[英]Spring data one to many mapping bi-directional

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

经理

  • manager_id。 ->主键。
  • manager_name。
  • department_id。

  • dept_id。 ->主键。
  • 部门名称。
  • manager_id。 这是对经理表的引用。

这些表上没有外键或其他约束。

我的实现是“一对多双向”,因为我在Department表中也有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。

  • 获取:/ managers:返回经理以及每个经理的部门列表。 / managers / id:返回经理及其部门列表。
  • 删除:/ managers:删除管理器及其所有关联的部门。
  • 帖子(添加):

    1. 除了按顺序生成的Manager ID之外,其他所有属性都设置为null。 当我查看日志时,它首先调用insert,然后在Manager表上进行更新。 我猜更新导致其所有属性为空行为。 此外,部门表未插入。 我传递用于插入的JSON数据类似于:

      {“ managerName”:“ John” [{“ deptName”:“ Sales”}]}

注意:我的控制器存在一些问题,该问题未能正确传递值,从而导致了空行为。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM