我在基于Spring框架的休息Web服务中使用hibernate 4.3作为持久层。我保存父对象并更新关联的子对象时遇到了问题。 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
以下是我一直试图使用网络服务在我的数据库中保存的Json。
JSON:
{"id":null,
"name":"company_name",
"Employee":[
{"id":1,
"name":"name1"},
{"id":2,
"name":"name2"}
]
}
当我在post请求中发送上面的json时,它应该创建新的父对象并更新子对象,它还应该在子表中设置父对象id(company_id =&#39;父对象id&#39;)。但不幸的是,它对我不起作用。 当它在字段
使用CascadeType.ALL或CascadeType.PERSIST时private List Employees = new ArrayList&lt;&gt;();
在我的公司实体中,它会出现错误
&#39;传递给分离的实体持久化&#39;
当我使用CascadeType.MERGE时,它只在子对象中设置父ID,但它不会更新子对象的任何其他字段,即&name;&#39; name&#39;柱。如果有人能帮助我,那么你的答案最受欢迎。 非常感谢你提前。
答案 0 :(得分:0)
可能是您正在保存子实体的拼写错误&#34;员工&#34;但在你的comoany实体中,它被称为&#34;员工&#34;。所以它试图保存一个不存在的实体。
试试以下
{"id":null,
"name":"company_name",
"Employees":[
{"id":1,
"name":"name1"},
{"id":2,
"name":"name2"}
]
}