天天看點

hibernate 延遲加載 級聯 删除

public void delete(MenuModel mm) {

//完成級聯删除的前提是,被删除對象級聯的資料存在

//删除OID為4的資料時,對應的對象應該級聯哪些必須是已知的,此時對象中的關系資料存在

//mm對象此時具有哪些資料?隻有uuid,關系資料為null

//h3對于關系資料為空的處理方式是:斷開所有關系即可,(把外鍵置空)由于此時設定了inverse=true,又不維護關系,沒有進行任何操作

 //解決方案:級聯删除前加載關系

MenuModel temp = menuDao.get(mm.getUuid());

//temp對象此時就具有了延遲加載功能,可以随時加載關系

menuDao.delete(temp);}

//當進行級聯删除時 一方對象首先要放棄與多方之間的關系,

//轉化為将外鍵字段設定為null 如果此時外鍵字段設定為不允許為null,

 //引發下列異常 Caused by: java.sql.BatchUpdateException: Column 'puuid' cannot be n

//此時隻需要在進行關系維護時,使一方對象不對關系進行維護即可,不操作外鍵————inverse=true

<set name=children cascade=delete inverse=true />

<key column=puuid/>

<one-to-many class=erp.auth.menu.vo.MenuModel/>

</set>

繼續閱讀