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再操心了!