[英]Delete and save Child : JPA
這是我的實體:
@Entity
public class Parent {
@Id
@Column(name = "ID")
private Long id;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parent")
private Set<Child> childs = new HashSet<Child>();
...
}
The child:
@Entity
public class Child {
@Id
@Column(name = "ID")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="PARENTID", nullable = false)
private Parent parent;
...
}
我想執行以下操作:
parent.setChild(child)
)。 這是我嘗試的但是它為父提出了ConstraintViolationexception
:
entityManager.remove(parent.getChild())
parent.setChild(new Child())
entityManager.merge(parent);
我怎樣才能解決這個問題?
“老”孩子可能仍然引用父母,而新孩子則沒有。 兩者都是一個問題。
除了刪除舊子項之外,還應將子實例的parent
引用設置為null
。
除了將新子項添加到父項之外,還需要將父項添加到子項以提供外鍵。
不要從多方(孩子)到一方(父母)級聯。 此類級聯的行為未定義,可能以意外的方式工作。
編輯:JPA 2.0規范有什么說法:
請注意,應用程序負責維護運行時關系的一致性 - 例如,當應用程序在運行時更新關系時,確保雙向關系的“一”和“多”方彼此一致。
修改父級中的關系,如下所示:
@OneToMany(cascade = {CascadeType.ALL}, orphanRemoval=true, mappedBy = "parent")
只需將新子項設置為父項並合並父項。 現在,之前引用的子項成為孤兒,JPA會在提交事務時自動刪除它們。
謝謝,JK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.