天天看點

hibernate多對多級聯删除總結

A. 應用場景:

一個簡單的權限系統的例子:

有三張主表:

使用者表:t_user

角色表:role

菜單表:menu

有兩張關系表:

使用者角色關系表:UserRoleMap

角色菜單關系表:RoleMenuMap

role表和t_user表,及role表和menu表通過兩張關系表進行多對多關聯。

目标是:當删除某個角色的時候,級聯删除兩張關系表中對應的關系記錄

B. 下面是hibernate的實作:

UserRoleMap.hbm.xml

RoleMenuMap.hbm.xml

Role.hbm.xml

注意上面Role.hbm.xml中的inverse="false",加上這句配置後,在delete(role);的時候hibernate會自動維護關系表,将已不存在的對應關系删除,如果想在删除關系的同時也删除對應的User或者Menu,就需要再加上cascade="delete"項配置。

當然可以在DDL建表時加入外鍵級聯更新的定義,這樣就全權交由資料庫來級聯删除,就不需要hibernate再操心了!