母实体
雇主(母公司(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "name")
private String name;
@OneToMany( mappedBy = "employer",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<Employee> empDetails = new ArrayList<>();
员工(子女(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne(optional = false,fetch = FetchType.LAZY)
@JoinColumn(name="emp_id", referencedColumnName = "id")
private Employer employer;
来自邮差的Json
{
"name" : "data",
"empDetails":[{
"firstName" : "ttest",
"lastName" : "te"
}]
}
我正在尝试在类似的单个保存调用中保存。一旦父项被保存,则子项将自动持久化。但在执行此操作时,子列中的父引用插入了null。
mappedBy="雇主">
这是额外的不必要的文本,所以我可以发布这个。
Spring不会在Employee实例中设置employer值。您应该在控制器中手动设置它们:
employer.getEmpDetails().forEach(e -> e.setEmployer(employer));
您必须以某种方式引用子对象中的父对象,才能正确地保持id的父对象。
我想你有这样的东西:
Employer employer = new Employer("Employer");
Employee empX = new Employee("Employee 1", "My lastname")
employer.getEmpDetails().add(empX);
您可以扩展构造函数并设置父引用:
Employer employer = new Employer("Employer");
Employee empX = new Employee("Employee 1", "My lastname", employer)
employer.getEmpDetails().add(empX);