3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個贊
orphanRemoval
與無關(guān)ON DELETE CASCADE
。
orphanRemoval
是一個完全ORM特定的東西。當(dāng)不再從“父”實(shí)體中引用“子”實(shí)體時,例如,當(dāng)您從父實(shí)體的相應(yīng)集合中刪除子實(shí)體時,它會將“子”實(shí)體標(biāo)記為要刪除。
ON DELETE CASCADE
是特定于數(shù)據(jù)庫的事物,當(dāng)刪除“父”行時,它將刪除數(shù)據(jù)庫中的“子”行。

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個贊
此處采用的示例:
當(dāng)一個Employee實(shí)體對象被移除,刪除操作被級聯(lián)到引用的Address實(shí)體對象。在這方面,orphanRemoval=true和cascade=CascadeType.REMOVE相同,并且如果orphanRemoval=true指定,CascadeType.REMOVE則是多余的。
兩種設(shè)置之間的區(qū)別在于對斷開關(guān)系的響應(yīng)。例如,例如當(dāng)將地址字段設(shè)置null為另一個Address對象或另一個對象時。
如果orphanRemoval=true指定為,則斷開連接的Address實(shí)例將自動刪除。這對于清除Address沒有所有者對象(例如Employee)的引用不應(yīng)該存在的依賴對象(例如)很有用。
如果僅cascade=CascadeType.REMOVE指定,則不執(zhí)行任何自動操作,因?yàn)閿嚅_關(guān)系不是刪除操作。
為避免因孤立刪除而導(dǎo)致引用懸而未決,應(yīng)僅對包含私有非共享依賴對象的字段啟用此功能。
我希望這一點(diǎn)更加清楚。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個贊
從集合中刪除一個子實(shí)體之后,您也將從數(shù)據(jù)庫中刪除該子實(shí)體。orphanRemoval還意味著您無法更改父母;如果有一個部門有員工,那么一旦您將該員工刪除以放入另一個部門,您將無意中在刷新/提交時將該員工從數(shù)據(jù)庫中刪除(以先到者為準(zhǔn))。士氣是將orphanRemoval設(shè)置為true,只要您確定該父級的子級在整個存在期間都不會遷移到另一個父級即可。啟用orphanRemoval也會自動將REMOVE添加到級聯(lián)列表。
- 3 回答
- 0 關(guān)注
- 1200 瀏覽
添加回答
舉報(bào)