0

私は春のフレームワークベースの残りのWebサービスで永続化レイヤーとしてハイバネート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サービスを使用して、私のDBに保存しようとしているものをJSONです。

JSON:

{"id":null, 
"name":"company_name", 
"Employee":[ 
    {"id":1, 
    "name":"name1"}, 
    {"id":2, 
    "name":"name2"} 
    ] 
} 

私はPOSTリクエストでJSON上で送信すると、それは新しい親オブジェクトと更新の子オブジェクトを作成する必要があり、それはまた、子テーブル内の親オブジェクトID(のcompany_id =「親オブジェクトIDを設定する必要があります')。しかし、残念ながらそれは私のためには機能しません。 それはプライベートリストの従業員は=新しいArrayListを<>(

フィールドでCascadeType.ALLまたはCascadeType.PERSISTを使用します)。私の会社の実体で

私はCascadeType.MERGEを使用する場合、それが唯一の子オブジェクトの親IDを設定し、それは

のエラーを与える「永続化するために渡されたデタッチ実体」子オブジェクトの他のフィールド、つまり「名前」列は更新されません。もし誰かが私を助けることができれば、あなたはあなたの答えに大歓迎です。 ありがとうございます。

答えて

0

あなたは子エンティティ "従業員"を保存しているが、あなたのcomoanyエンティティでは "従業員"という名前のスペルミスである可能性があります。存在しないエンティティを保存しようとしています。

だけ補正のため、次の

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

感謝を試してみたが、それは私のためにも動作しません。私はまだ同じエラーが発生します。 – Govardhan

関連する問題