私は春のフレームワークベースの残りの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を設定し、それは
のエラーを与える「永続化するために渡されたデタッチ実体」子オブジェクトの他のフィールド、つまり「名前」列は更新されません。もし誰かが私を助けることができれば、あなたはあなたの答えに大歓迎です。 ありがとうございます。
感謝を試してみたが、それは私のためにも動作しません。私はまだ同じエラーが発生します。 – Govardhan