亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除級聯時,JPA 2.0 orphanRemoval = true VS

刪除級聯時,JPA 2.0 orphanRemoval = true VS

九州編程 2019-12-09 13:12:41
我對JPA 2.0 orphanRemoval屬性有些困惑。我認為當我使用JPA提供程序的數據庫生成工具來創建基礎數據庫DDL以使其具有ON DELETE CASCADE特定關系時,需要它。但是,如果數據庫存在并且已經具有ON DELETE CASCADEon關系,這是否不足以適當地級聯刪除?orphanRemoval另外還做什么?干杯
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

orphanRemoval與無關ON DELETE CASCADE。

orphanRemoval是一個完全ORM特定的東西。當不再從“父”實體中引用“子”實體時,例如,當您從父實體的相應集合中刪除子實體時,它會將“子”實體標記為要刪除。

ON DELETE CASCADE特定數據庫的事物,當刪除“父”行時,它將刪除數據庫中的“子”行。


查看完整回答
反對 回復 2019-12-09
?
MM們

TA貢獻1886條經驗 獲得超2個贊

此處采用的示例:


當一個Employee實體對象被移除,刪除操作被級聯到引用的Address實體對象。在這方面,orphanRemoval=true和cascade=CascadeType.REMOVE相同,并且如果orphanRemoval=true指定,CascadeType.REMOVE則是多余的。


兩種設置之間的區別在于對斷開關系的響應。例如,例如當將地址字段設置null為另一個Address對象或另一個對象時。


如果orphanRemoval=true指定為,則斷開連接的Address實例將自動刪除。這對于清除Address沒有所有者對象(例如Employee)的引用不應該存在的依賴對象(例如)很有用。


如果僅cascade=CascadeType.REMOVE指定,則不執行任何自動操作,因為斷開關系不是刪除操作。


為避免因孤立刪除而導致引用懸而未決,應僅對包含私有非共享依賴對象的字段啟用此功能。


我希望這一點更加清楚。


查看完整回答
反對 回復 2019-12-09
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

從集合中刪除一個子實體之后,您也將從數據庫中刪除該子實體。orphanRemoval還意味著您無法更改父母;如果有一個部門有員工,那么一旦您將該員工刪除以放入另一個部門,您將無意中在刷新/提交時將該員工從數據庫中刪除(以先到者為準)。士氣是將orphanRemoval設置為true,只要您確定該父級的子級在整個存在期間都不會遷移到另一個父級即可。啟用orphanRemoval也會自動將REMOVE添加到級聯列表。


查看完整回答
反對 回復 2019-12-09
  • 3 回答
  • 0 關注
  • 1194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號