2016-10-28 58 views
0

我正在使用遺留系統,並且必須實現一些類似於以下問題的功能。 表是經理和部門,經理可以有多個部門,但部門只有一個經理。春季數據一對多映射雙向

經理

  • 經理標識。 - >主鍵。
  • manager_name。
  • department_id。

  • 的dept_id。 - >主鍵。
  • dept_name。
  • manager_id。這是對經理人表格的參考。

這些表上沒有外鍵或其他約束。

我的實現是, 一對多雙向,因爲我在部門表中也有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/id:返回一個經理及其部門名單。
  • 刪除: /管理員:刪除管理器及其關聯的所有部門。
  • 郵報(添加):

    1. 除了將順序產生的其他一切都被設置爲null經理ID。當我查看日誌時,它首先調用插入,然後在管理器表上更新。我猜更新是導致其所有屬性的空行爲。此外,部門表沒有被插入。其中我通過用於插入 JSON數據是類似於:

      { 「managerName」: 「約翰」 [{ 「DEPTNAME」: 「銷售」 }] }

注意:我的控制器出現了一些問題,它沒有正確傳遞導致null行爲的值。

回答

0

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

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

空行爲是由於我的控制器中的某些問題而引起的。但我想這也是一個問題,現在它就像一個魅力。 – Madstuffs