Hibernate的Cascade——級聯操作
在Hibernate中,針對持久化實體的配置文件中有Cascade這樣一個屬性,顧名思義就是級聯,也就是說在操作當
前實體時,針對當前實體的操作會影響到相應配置的關聯實體。比如針對當前實體進行保存操作時,會同時保存
與其關聯的實體,當然這種額外操作的產生取決於你是否在當前實體的配置文件中對關聯實體的元素配置了
Cascade屬性。
而需要進行級聯的操作可能涉及到增加,修改,刪除等相應的數據庫操作,具體Cascade的取值則
分為多種,如all,表示針對所有操作都會進行級聯,如save-update,表示針對插入和修改會進行級聯操作。對
於Cascade的取值問題需要根本具體需求而定,這裏沒有一個統一的標準應該取怎樣的值符合你的需要。從現實
需求分析來決定應該如何取值。
all :: 所有情況下均進行關聯操作。
none: 所有情況下均不進行關聯操作。這是默認值。
save-update: 在執行save/update/saveOrUpdate時進行關聯操作。
delete: 在執行delete時進行關聯操作。
all的意思是save-update + delete
all-delete-orphan 的意思是當對象圖中產生孤兒節點時,在數據庫中刪除該節點
舉個例子說一下all-delete-orphan:
Category與Item是一對多的關係,也就是說Category類中有個Set類型的變量items. 舉個例子,現items中存兩個
Item, item1,item2,如果定義關係為all-delete-orphan當items中刪除掉一個item(比如用remove()方法刪除
item1),那麼被刪除的Item類實例將變成孤兒節點,當執行category.update(),或session.flush()時hibernate同
步緩存和數據庫,會把數據庫中item1對應的記錄刪掉。
參考博客:
https://dreamzhong.iteye.com/blog/1273157
https://apps.hi.baidu.com/share/detail/5946383
最後更新:2017-04-02 06:52:18