0

我在基于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在子对象

的错误但它不会更新子对象的任何其他字段,即“名称”列。如果任何人都可以帮助我,那么您的答案是最受欢迎的。 非常感谢您提前。

回答

0

可能是您保存子实体“Employee”的拼写错误,但是在您的comoany实体中它被称为“Employees”。所以它试图保存一个不存在的实体。

只是尝试以下

{"id":null, 
"name":"company_name", 
"Employees":[ 
    {"id":1, 
    "name":"name1"}, 
    {"id":2, 
    "name":"name2"} 
    ] 
} 
+0

感谢修正,但它不工作对我来说也是如此。我还有同样的错误。 – Govardhan