我在基于Spring框架的休息Web服务中使用hibernate 4.3作为持久层。当我保存父对象并更新关联的子对象时,我一直面临一个问题。 Hibernate实体和表结构如下所示。 这是我的父类。如何在Hibernate中保存(持久保存)父对象时更新(合并)子对象?
public class Company {
@Column("name"= "id")
private int id;
@Column("name"= "name")
private String name;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinColumn(name = "company_id")
private List<Employee> Employees = new ArrayList<>();
}
这是我的子类:
public class Employee {
@Column("name"= "id")
private int id;
@Column("name"= "name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private Company company;
}
各表:
Table Company:
id
name
Table Employee
id
name
company_id
这是我一直在尝试使用Web服务我的数据库来保存JSON。
JSON:
{"id":null,
"name":"company_name",
"Employee":[
{"id":1,
"name":"name1"},
{"id":2,
"name":"name2"}
]
}
,当我在POST请求上述JSON发送,它应该创建新的父对象和更新子对象,它也应该设置父对象ID在子表(COMPANY_ID =“父对象ID “)。但不幸的是它不适合我。 当使用CascadeType.ALL或CascadeType.PERSIST在字段
在我的公司实体私人列表雇员=新的ArrayList <>();
,它给“被persist超脱实体”
当我使用CascadeType.MERGE,它只设置父ID在子对象
的错误但它不会更新子对象的任何其他字段,即“名称”列。如果任何人都可以帮助我,那么您的答案是最受欢迎的。 非常感谢您提前。
感谢修正,但它不工作对我来说也是如此。我还有同样的错误。 – Govardhan