![](/img/trans.png)
[英]Hibernate OneToMany relationship sets foreign key to null when inserting entity
[英]Hibernate soft delete sets foreign key to null
我有 2 個這樣的實體:
@SQLDelete(sql = "UPDATE parent_table SET deleted = true WHERE id = ?")
public class Parent {
private boolean deleted;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private List<Child> children;
// other stuff
}
@SQLDelete(sql = "UPDATE child_table SET deleted = true WHERE id = ?")
public class Child {
private boolean deleted;
// stuff
}
如您所見,它是一個單向的 @OneToMany 映射,並且兩個實體都使用帶有@SQLDelete
注釋的軟刪除。 我正在嘗試軟刪除父項,反過來又希望子項也被軟刪除。
當我嘗試軟刪除時,它會將兩個表中的deleted
標志設置為 true,這就是我想要的。
但是,當我執行刪除時, child_table
的parent_id
設置為null
。 為什么會發生這種情況,我該如何阻止?
刪除操作:
Parent parent= entityManager.find(Parent.class, id);
entityManager.remove(parent);
我不確定您想要的是否可行,但您可以嘗試將其添加到您的映射中:
@OnDelete(action = OnDeleteAction.NO_ACTION)
也許這個 Hibernate 不會改變這種關系。
作為解決方法,您可以關閉級聯刪除並手動刪除子項
你需要:
@OneToMany(cascade = CascadeType.ALL)
替換為@OneToMany(cascade = CascadeType.PERSIST)
。nullable = false
添加到@JoinColumn(name = "parent_id")
注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.