我正在使用遗留系统并且必须实现一些类似于以下问题的功能。 表是经理和部门,经理可以拥有多个部门,但部门只有一个经理。
管理器
系
这些表格上没有外键或其他限制。
我的实施是, 因为我在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。
发布(添加):
除了顺序生成的Manager id之外,其他所有内容都设置为null。当我查看日志时,它首先调用insert然后在Manager表上更新。我猜更新导致其所有属性的null行为。此外,部门表未插入。 我通过插入的JSON数据类似于:
{ &#34; managerName&#34;:&#34; John&#34; [{ &#34; deptName&#34;:&#34; Sales&#34; }] }
注意:我的控制器存在一些问题,它没有准确地传递该值而导致空行为。
答案 0 :(得分:0)
在Manager中更改部门初始化,分配一个空的HashSet。
@OneToMany(mappedBy = "managers", cascade = CascadeType.ALL)
@JsonManagedReference
private Set<Department> departments=new HashSet<Department>();