天天看點

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對應的記錄删掉。

參考部落格:

http://dreamzhong.iteye.com/blog/1273157

http://apps.hi.baidu.com/share/detail/5946383