2016-10-28 9 views
0

私はレガシーシステムで作業しており、以下のようないくつかの機能を実装する必要があります。 テーブルはマネージャと部門で、マネージャは複数の部門を持つことができますが、部門にはマネージャが1つしかありません。1対多マッピング双方向のデータ

マネージャー

  • MANAGER_ID。 - >主キー。
  • manager_name。
  • department_id。

部門

  • DEPT_ID。 - >主キー。
  • dept_name。
  • manager_id。これは、Managerのテーブルへの参照です。

これらのテーブルには、外部キーやその他の制約はありません。

私の実装は でした。私は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ください。

  • Get: /managers:各マネージャの部門リストと共にマネージャを返します。 /managers/id:部門リストを持つマネージャを返します。
  • 削除: /managers:マネージャとそれに関連付けられているすべてのマネージャを削除します。
  • ポスト(追加):他のすべてがnullに設定されて順次生成された管理者IDを除き

    1. 。ログを調べると、最初に挿入が呼び出され、Managerテーブルで更新されます。私はすべてのプロパティにnull動作を引き起こしていると思います。また、部門表が挿入されていません。

      :私は、挿入のために渡さ JSONデータと同様であった{ "managerName": "ジョン" [{ "DEPTNAME": "販売" }] }

注:私のコントローラには、null動作を引き起こした値を正確に渡さなかったいくつかの問題がありました。

答えて

0

Managerで部署の初期化を変更し、空のHashSetを割り当てます。

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

コントローラで何らかの問題が発生したため、Nullが発生しました。しかし、私はそれも問題であったと思うし、今は魅力のように動作します。 – Madstuffs

関連する問題