`

hibernate多对多级联删除总结

阅读更多
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多对多关联映射

    `org.hibernate.persister.collection.AbstractCollectionPersister`和`org.hibernate.action.internal.CollectionRemoveAction`等类是处理多对多关联删除的关键。通过阅读源码,我们可以了解到Hibernate如何处理...

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    hibernate 级联(cascade和inverse)一对多

    总结,Hibernate的级联和反转特性对于一对多关系的管理至关重要,它们可以简化开发过程,提高数据操作的效率。通过合理配置,可以确保对象关系的正确同步,并利用JUnit进行测试以确保功能的正确性。在实践中,应根据...

    Hibernate多对多实例+数据库代码

    通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找。 **总结** 这个"Hibernate多对多实例+数据库代码"涵盖了ORM的核心概念,特别是...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。

    Hibernate-基础联表模板

    "Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    hibernate多对多

    总结来说,"Hibernate多对多"涉及到Java ORM框架Hibernate处理两个实体类之间的多对多关系的技术,在MyEclipse环境下进行开发,提供了从设计实体类、配置映射到实现业务逻辑的全套解决方案。通过提供的压缩包文件,...

    hibernate 映射关系学习入门 多对多实体映射

    在实际应用中,我们可以通过Hibernate提供的API来添加、删除和查找多对多关系。例如,向`Student`添加一门`Course`,可以使用`addCourse(Course course)`方法;删除则通过`removeCourse(Course course)`方法。 六、...

    hibernate 一对多,两个实例项目

    总结,"hibernate 一对多,两个实例项目"旨在帮助开发者深入理解Hibernate中的一对多关系映射,并通过实际项目实践来提升技能。通过这两个实例,我们可以学习到如何配置、操作以及优化一对多关系,从而在实际开发中...

    struts+spring+hibernate实现图书修改和删除

    在这个项目中,Struts 2被用来处理用户对图书修改和删除的请求,通过Action类定义业务逻辑,并返回相应的视图结果。 **Spring** Spring是Java企业级应用的核心框架,提供依赖注入(DI)和面向切面编程(AOP)等功能...

    Hibernate多对多

    **标题:“Hibernate多对多”** 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作。在关系数据库中,表与表之间的关系可以是一对一、一对多或多对多。本...

    hibernate 一对多和多对一的理解

    hibernate 一对多和多对一的理解 自己的个人看法 大家也来看看

    hibernate 多对多映射实例,学生 选课

    在这个“hibernate 多对多映射实例,学生 选课”项目中,我们将探讨如何使用Hibernate处理多对多关系,以及如何构建一个学生选课的系统。 首先,我们要理解多对多关系。在现实生活中,学生和课程之间就是一个典型的...

    hibernate学习总结文档

    Hibernate 支持多种关联关系,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。关联关系可以通过外键或代理键实现,配置包括懒加载(lazy loading)和级联操作(cascading...

    Hibernate 简单 PPT 总结

    【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...

Global site tag (gtag.js) - Google Analytics