關於hibernate和delete-orphan級聯的問題。假設我有一些Parent類,裏面收集了Child。在父類 的一對多關係的休眠映射中,我設置了cascade all-delete-orphan。假設其餘所有配置都正確。然後,我從父集合(.getChildren()。remove(A))中移除子A並調用session.saveOrUpdate(P)來保存父對象。由於設置了全部刪除孤立級聯,父對象將與一個孩子一起保存,而另一個已刪除的孩子(A)將從數據庫中刪除。這是正確的行爲。Hibernate映射:delete-orphan cascade
據我瞭解,當休眠負載,對象(P),它會返回其子列表到一些持久性集合(如PersistentSet)以及與此集合中的所有操作都是由Hibernate攔截,這允許它來決定哪個孩子應該orphanly刪除從數據庫。
但是..我有後續項目架構:
實體是從數據庫(DO對象)將其傳遞到那裏它被轉換使用推土機架構,服務對象(門面對象)裝載機後。轉換後,將DO對象中的持久性收集轉換爲TO中的簡單ArrayList。然後它被傳遞到UI ,在那裏它可以被修改(從子集合中刪除子A)。當我們把它保存下來時,我們將它傳遞給facade,使用Doser將其轉換回DO對象,然後將它保存到數據庫(使用session.saveOrUpdate)。
在這種情況下,級聯不起作用,並且移除孩子不是孤兒。它仍然以db的形式呈現。
只有當我們調用.merge insted saveOrUpdate時,級聯纔有效。我認爲這是因爲hibernate自動將我們的對象綁定到會話,然後進行更新。
那麼,任何人都可以描述我這種行爲?是否可以使用這種DO - > TO - > DO轉換來支持刪除孤立級聯?
這只是常見的場景和常見問題。如果需要的話,我將能夠連接代碼/映射等