Hibernate 注解中CascadeType用法揭斧,匯總?cè)缦拢?/p>
cascade(級聯(lián))
級聯(lián)在編寫觸發(fā)器時經(jīng)常用到儡嘶,觸發(fā)器的作用是當(dāng) 主控表信息改變時愧薛,用來保證其關(guān)聯(lián)表中數(shù)據(jù)同步更新戒洼。若對觸發(fā)器來修改或刪除關(guān)聯(lián)表相記錄抖棘,必須要刪除對應(yīng)的關(guān)聯(lián)表信息箭券,否則净捅,會存有臟數(shù)據(jù)。所以辩块,適當(dāng)?shù)淖龇ㄊ腔琢瑒h除主表的同時,關(guān)聯(lián)表的信息也要同時刪除庆捺,在hibernate中古今,只需設(shè)置cascade屬性值即可。
CascadeType.PERSIST:級聯(lián)新增(又稱級聯(lián)保存):對order對象保存時也對items里的對象也會保存滔以。對應(yīng)EntityManager的presist方法
例子:只有A類新增時捉腥,會級聯(lián)B對象新增。若B對象在數(shù)據(jù)庫存(跟新)在則拋異常(讓B變?yōu)槌志脩B(tài))
CascadeType.MERGE:級聯(lián)合并(級聯(lián)更新):若items屬性修改了那么order對象保存時同時修改items里的對象你画。對應(yīng)EntityManager的merge方法??
例子:指A類新增或者變化抵碟,會級聯(lián)B對象(新增或者變化)
CascadeType.REMOVE:級聯(lián)刪除:對order對象刪除也對items里的對象也會刪除。對應(yīng)EntityManager的remove方法?
例子:REMOVE只有A類刪除時坏匪,會級聯(lián)刪除B類拟逮;
CascadeType.REFRESH:級聯(lián)刷新:獲取order對象里也同時也重新獲取最新的items時的對象。對應(yīng)EntityManager的refresh(object)方法有效适滓。即會重新查詢數(shù)據(jù)庫里的最新數(shù)據(jù)?? (用的比較少)
CascadeType.ALL:以上四種都是
綜上所述:一般的敦迄,用CascadeType.MERGE:級聯(lián)合并(級聯(lián)更新)就能達(dá)到級更新同時又穩(wěn)定不報錯。