天天看点

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