双向映射null值被持久化在子对象的父引用列中



母实体

雇主(母公司(

@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);

相关内容

最新更新