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