A. 应用场景:
一个简单的权限系统的例子:
有三张主表:
用户表:t_user
角色表:role
菜单表:menu
有两张关系表:
用户角色关系表:UserRoleMap
角色菜单关系表:RoleMenuMap
role表和t_user表,及role表和menu表通过两张关系表进行多对多关联。
目标是:当删除某个角色的时候,级联删除两张关系表中对应的关系记录
B. 下面是hibernate的实现:
UserRoleMap.hbm.xml
Xml代码
1. <?xml version="1.0"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse - Hibernate Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.cuishen.edwview.pojo.sys.UserRoleMap" table="userrolemap" catalog="edwindex">
9. <composite-id>
10. <key-property name="userId" type="java.lang.Long">
11. <column name="userid" />
12. </key-property>
13. <key-property name="roleId" type="java.lang.Long">
14. <column name="roleid" />
15. </key-property>
16. </composite-id>
17. </class>
18. </hibernate-mapping>
RoleMenuMap.hbm.xml
Xml代码
1. <?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <hibernate-mapping>
5. <class name="com.cuishen.edwview.pojo.sys.RoleMenuMap" table="rolemenumap">
6. <composite-id>
7. <key-property name="roleId" column="roleid" type="java.lang.Long"/>
8. <key-property name="menuId" column="menuid" type="java.lang.Long"/>
9. </composite-id>
10. </class>
11. </hibernate-mapping>
Role.hbm.xml
Xml代码
1. <?xml version="1.0"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse - Hibernate Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.cuishen.edwview.pojo.sys.Role" table="role" catalog="edwindex">
9. <id name="id" type="java.lang.Long" column="id">
10. <generator class="sequence">
11. <param name="sequence">ROLE_SEQ</param>
12. </generator>
13. </id>
14. <property name="name" type="string">
15. <column name="name" length="20" not-null="true" />
16. </property>
17. <set name="menus" table="RoleMenuMap" inverse="false" lazy="false" order-by="roleId, menuId">
18. <key column="roleId"/>
19. <many-to-many column="menuId" class="com.cuishen.edwview.pojo.sys.Menu"/>
20. </set>
21. <set name="users" table="UserRoleMap" inverse="false" lazy="false">
22. <key column="roleId"/>
23. <many-to-many column="userId" class="com.cuishen.edwview.pojo.sys.User"/>
24. </set>
25. </class>
26. </hibernate-mapping>
注意上面Role.hbm.xml中的inverse="false",加上这句配置后,在delete(role);的时候hibernate 会自动维护关系表,将已不存在的对应关系删除,如果想在删除关系的同时也删除对应的User或者Menu,就需要再加上cascade="delete" 项配置。
当然可以在DDL建表时加入外键级联更新的定义,这样就全权交由数据库来级联删除,就不需要hibernate再操心了!
分享到:
相关推荐
Hibernate 一对多、多对一、级联、加载、反转
NULL 博文链接:https://1028826685.iteye.com/blog/1536060
hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。
hibernate多对多关系映射案例,配有对应的jar包。
Hibernate多对多关联添加及查询示例
Hibernate一对一,一对多,多对多实例
hibernate多表联合查询实例,很经典的查询语句和总结.
这里包含了hibernate多对一单向关联关系实现源码,希望对你有用。
详尽说明了hibernate的多对多原理。
hibernate3学习总结hibernate3学习总结hibernate3学习总结hibernate3学习总结
Hibernate.cfg.xml配置总结
Hibernate关于注解的一对多,多对多,一对一案例。。。。
struts2+HIbernate 多对一关系 及部分删除
Hibernate的多对一和一对多操作实例
hibernate一对多案例,里边用到的jar包我上传过
NULL 博文链接:https://gaoquanyang.iteye.com/blog/1213765
hibernate 一对多和多对一的理解 自己的个人看法 大家也来看看
加入了hibernate框架的javaWeb项目,里面包含了一对多的典型配置
Hibernate框架知识点的梳理;对HQL检索、检索策略、以及如何配置详细的进行描述