簡體   English   中英

休眠中相關對象的刪除

[英]Deleting of related objects in hibernate

我有一個帶有兩個類的休眠模型,比方說A和B。B對A的引用是多對一的。

我查詢單個A和單個B對象。 這些從會話中分離出來,並在其他地方/其他地方被處理。 BA屬性是一個惰性代理。 稍后,A和B都需要刪除。 我創建一個新的Session並調用.delete(A).delete(B)

刪除A是可以的,但是刪除B則會導致以下異常,

Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.xxx.hibernate.objects.B.A
    at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) [hibernate3.jar:na]
    at org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:272) [hibernate3.jar:na]
    at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:163) [hibernate3.jar:na]
    at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74) [hibernate3.jar:na]
    at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:794) [hibernate3.jar:na]
    at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:772) [hibernate3.jar:na]

在刪除期間看起來像在代碼中的Diggin一樣,進行了可空性檢查,並且由於首先刪除了A,所以刪除B會使空檢查失敗。 即使我傳遞的B對象設置為非空,它也認為A引用為“空”。 看起來它在內部Session狀態下進行了一些查找,並找到了已刪除的A實例。

有人知道我該如何解決嗎? 如果可能的話,我寧願不要依賴於刪除的順序,除非在B之前先刪除A根本是錯誤的,原因是我沒有看到。

我也不完全確定為什么要對刪除操作進行空檢查。

我認為您必須先刪除所有“孩子”,然后再刪除“父母”。 我知道您不希望受到刪除順序的支配,但我認為這沒有其他方法。

只是一個想法,但請看一下刪除的每個步驟實際到達數據庫的內容。 如果將Hibernate設置為使用表的所有列(包括鏈接到A的外鍵)創建DELETE命令,則DELETE命令在尋找A鍵的NULL值時將找不到任何內容。

刪除A會將B中對其的引用設置為null,這是該架構禁止的。 更改刪除順序的另一種方法是在B中添加一個反向的多對多集合,並使用級聯刪除。 僅需要刪除A。

暫無
暫無

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

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