簡體   English   中英

Hibernate 軟刪除將外鍵設置為空

[英]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_tableparent_id設置為null 為什么會發生這種情況,我該如何阻止?

刪除操作:

Parent parent= entityManager.find(Parent.class, id);
entityManager.remove(parent);

我不確定您想要的是否可行,但您可以嘗試將其添加到您的映射中:

@OnDelete(action = OnDeleteAction.NO_ACTION)

也許這個 Hibernate 不會改變這種關系。

作為解決方法,您可以關閉級聯刪除並手動刪除子項

你需要:

  1. @OneToMany(cascade = CascadeType.ALL)替換為@OneToMany(cascade = CascadeType.PERSIST)
  2. nullable = false添加到@JoinColumn(name = "parent_id")注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM