這兩天,參加一個課程設計,同時這個項目又作為一個模塊鑲嵌到其他項目中,考慮如此,應與原先的架構相同,因牽扯到留言和相互@功能,故數據庫之間OneToOne,OneToMany,ManyToMany之風盛行,用到Hibernate 注解中CascadeType用法,今將其匯總如下:
cascade(級聯)
級聯在編寫觸發器時經常用到,觸發器的作用是當 主控表信息改變時,用來保證其關聯表中數據同步更新。若對觸發器來修改或刪除關聯表相記錄,必須要刪除對應的關聯表信息,否則,會存有臟數據。所以,適當的做法是,刪除主表的同時,關聯表的信息也要同時刪除,在hibernate中,只需設置cascade屬性值即可。
CascadeType.PERSIST:級聯新增(又稱級聯保存):對order對象保存時也對items里的對象也會保存。對應EntityManager的presist方法
例子:只有A類新增時,會級聯B對象新增。若B對象在數據庫存(跟新)在則拋異常(讓B變為持久態)
CascadeType.MERGE:級聯合並(級聯更新):若items屬性修改了那么order對象保存時同時修改items里的對象。對應EntityManager的merge方法
例子:指A類新增或者變化,會級聯B對象(新增或者變化)
CascadeType.REMOVE:級聯刪除:對order對象刪除也對items里的對象也會刪除。對應EntityManager的remove方法
例子:REMOVE只有A類刪除時,會級聯刪除B類;
CascadeType.REFRESH:級聯刷新:獲取order對象里也同時也重新獲取最新的items時的對象。對應EntityManager的refresh(object)方法有效。即會重新查詢數據庫里的最新數據 (用的比較少)
CascadeType.ALL:以上四種都是
綜上所述:一般的,用CascadeType.MERGE:級聯合並(級聯更新)就能達到級更新同時又穩定不報錯。