3 回答

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

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

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