- 浏览: 296895 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wangweiying123:
import com.sse.monitor.bean.Mes ...
一个项目看java TCP/IP Socket编程(1.3版) -
daxiaoli123:
求源码 448485223@qq.com
一个项目看java TCP/IP Socket编程(1.3版) -
jeromexf:
楼主,求源码,万分感谢(jeromexf@gmail.com) ...
一个项目看java TCP/IP Socket编程(1.3版) -
cuishen:
注意: 网上有人说IE8以下不支持Max-Age, 上面的代码 ...
Response Header Set-Cookie difference in cross browser -
zhunengfei:
刚接触socket,不是太明白,楼主的例子里面工具给的不是很全 ...
一个项目看java TCP/IP Socket编程(1.3版)
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再操心了!
一个简单的权限系统的例子:
有三张主表:
用户表:t_user
角色表:role
菜单表:menu
有两张关系表:
用户角色关系表:UserRoleMap
角色菜单关系表:RoleMenuMap
role表和t_user表,及role表和menu表通过两张关系表进行多对多关联。
目标是:当删除某个角色的时候,级联删除两张关系表中对应的关系记录
B. 下面是hibernate的实现:
UserRoleMap.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.UserRoleMap" table="userrolemap" catalog="edwindex"> <composite-id> <key-property name="userId" type="java.lang.Long"> <column name="userid" /> </key-property> <key-property name="roleId" type="java.lang.Long"> <column name="roleid" /> </key-property> </composite-id> </class> </hibernate-mapping>
RoleMenuMap.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.RoleMenuMap" table="rolemenumap"> <composite-id> <key-property name="roleId" column="roleid" type="java.lang.Long"/> <key-property name="menuId" column="menuid" type="java.lang.Long"/> </composite-id> </class> </hibernate-mapping>
Role.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.Role" table="role" catalog="edwindex"> <id name="id" type="java.lang.Long" column="id"> <generator class="sequence"> <param name="sequence">ROLE_SEQ</param> </generator> </id> <property name="name" type="string"> <column name="name" length="20" not-null="true" /> </property> <set name="menus" table="RoleMenuMap" inverse="false" lazy="false" order-by="roleId, menuId"> <key column="roleId"/> <many-to-many column="menuId" class="com.cuishen.edwview.pojo.sys.Menu"/> </set> <set name="users" table="UserRoleMap" inverse="false" lazy="false"> <key column="roleId"/> <many-to-many column="userId" class="com.cuishen.edwview.pojo.sys.User"/> </set> </class> </hibernate-mapping>
注意上面Role.hbm.xml中的inverse="false",加上这句配置后,在delete(role);的时候hibernate会自动维护关系表,将已不存在的对应关系删除,如果想在删除关系的同时也删除对应的User或者Menu,就需要再加上cascade="delete"项配置。
当然可以在DDL建表时加入外键级联更新的定义,这样就全权交由数据库来级联删除,就不需要hibernate再操心了!
评论
2 楼
diaoweili
2010-11-18
cuishen 写道
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再操心了!
一个简单的权限系统的例子:
有三张主表:
用户表:t_user
角色表:role
菜单表:menu
有两张关系表:
用户角色关系表:UserRoleMap
角色菜单关系表:RoleMenuMap
role表和t_user表,及role表和menu表通过两张关系表进行多对多关联。
目标是:当删除某个角色的时候,级联删除两张关系表中对应的关系记录
B. 下面是hibernate的实现:
UserRoleMap.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.UserRoleMap" table="userrolemap" catalog="edwindex"> <composite-id> <key-property name="userId" type="java.lang.Long"> <column name="userid" /> </key-property> <key-property name="roleId" type="java.lang.Long"> <column name="roleid" /> </key-property> </composite-id> </class> </hibernate-mapping>
RoleMenuMap.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.RoleMenuMap" table="rolemenumap"> <composite-id> <key-property name="roleId" column="roleid" type="java.lang.Long"/> <key-property name="menuId" column="menuid" type="java.lang.Long"/> </composite-id> </class> </hibernate-mapping>
Role.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="com.cuishen.edwview.pojo.sys.Role" table="role" catalog="edwindex"> <id name="id" type="java.lang.Long" column="id"> <generator class="sequence"> <param name="sequence">ROLE_SEQ</param> </generator> </id> <property name="name" type="string"> <column name="name" length="20" not-null="true" /> </property> <set name="menus" table="RoleMenuMap" inverse="false" lazy="false" order-by="roleId, menuId"> <key column="roleId"/> <many-to-many column="menuId" class="com.cuishen.edwview.pojo.sys.Menu"/> </set> <set name="users" table="UserRoleMap" inverse="false" lazy="false"> <key column="roleId"/> <many-to-many column="userId" class="com.cuishen.edwview.pojo.sys.User"/> </set> </class> </hibernate-mapping>
注意上面Role.hbm.xml中的inverse="false",加上这句配置后,在delete(role);的时候hibernate会自动维护关系表,将已不存在的对应关系删除,如果想在删除关系的同时也删除对应的User或者Menu,就需要再加上cascade="delete"项配置。
当然可以在DDL建表时加入外键级联更新的定义,这样就全权交由数据库来级联删除,就不需要hibernate再操心了!
1 楼
diaoweili
2010-11-18
恍然大悟啊~~
你把权限模型说的很清楚,我都把级联维护的事给忘了,
看到cascade="delete" 才回过神来。
辛苦啊!~
你把权限模型说的很清楚,我都把级联维护的事给忘了,
看到cascade="delete" 才回过神来。
辛苦啊!~
发表评论
-
Response Header Set-Cookie difference in cross browser
2014-07-02 21:26 8391如果你项目中需要在server端把cookie写回client ... -
struts1 redirect issue
2014-05-08 23:04 1339近日突然发现struts1 的redirect有很大的限制,它 ... -
Cookie 和 sessionStorage的区别
2014-03-18 23:21 1546expire设为null的cookie是session sco ... -
http https get post 的区别,定义/安全性/性能
2014-02-20 18:19 14638HTTP / HTTPS request 的 get / po ... -
struts1的tiles导致的response cache无法禁止的issue
2014-02-15 00:13 1488近日struts 1项目中遇到一个很怪异的问题,项目中的所有. ... -
XFS攻击一例
2013-08-13 17:50 5997XFS: Cross Frame Script (跨框架脚本) ... -
XSS攻击一例
2013-08-12 17:55 1772XSS 全称(Cross Site Scripting) 跨站 ... -
maven3 compile failed, class file not found issue
2013-07-16 18:31 1431今日maven3 build 老是失败,停在compile,报 ... -
maven plugin for eclipse 3.6+
2013-07-04 18:24 1159this for eclipse 3.6 down http: ... -
JQuery异步提交表单在Firefox button onclick事件下可能导致重复提交
2013-06-04 19:58 4857当我们处理button的onclick事件时,在onclick ... -
AJAX JQuery 提交表单乱码问题解决方案
2012-10-16 13:59 13667最近遇到AJAX/JQuery 提交form表单出现乱码的问题 ... -
iBATIS一对多/多对多N+1问题解决方案
2009-12-08 17:53 13130对于iBATIS一对多/多对多的问题,传统的办法是在一对多/多 ... -
最原始的O/R Mapping,比hibernate轻的多
2009-12-04 17:44 3516hibernate的O/R Mapping确实 ... -
Apache_WebLogic9.2.2安装及集群、SSL配置手册
2009-10-09 17:27 1544Apache_WebLogic9.2.2安装及集群、SSL配置 ... -
浅析Java web程序之客户端和服务器端交互原理
2009-09-16 21:18 47691. 协议 a. TCP/IP整体构 ... -
spring aop 事务配置总结
2009-08-06 13:47 5587以下配置基于spring 1x ... -
从源代码解读spring之DataSource实现和FactoryBean模式
2009-07-22 13:25 8005大家平日使用spring + hibernate做项目的时候大 ... -
从源代码解读hibernate之数据库连接
2009-07-17 15:59 3754大家都知道hibernate是在JDBC基础上的封装,那么它的 ... -
AIX环境下JDK1.5 + WebLogic9.2.2安装配置手册
2009-01-22 13:15 2363项目中用到: 服务器:IBM 64位 小型机 操作系统:AI ... -
从源代码解读spring IOC容器
2008-09-19 09:43 4009spring IOC容器(Inversion of Contr ...
相关推荐
`org.hibernate.persister.collection.AbstractCollectionPersister`和`org.hibernate.action.internal.CollectionRemoveAction`等类是处理多对多关联删除的关键。通过阅读源码,我们可以了解到Hibernate如何处理...
在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...
总结,Hibernate的级联和反转特性对于一对多关系的管理至关重要,它们可以简化开发过程,提高数据操作的效率。通过合理配置,可以确保对象关系的正确同步,并利用JUnit进行测试以确保功能的正确性。在实践中,应根据...
通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找。 **总结** 这个"Hibernate多对多实例+数据库代码"涵盖了ORM的核心概念,特别是...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。
"Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...
本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...
总结来说,"Hibernate多对多"涉及到Java ORM框架Hibernate处理两个实体类之间的多对多关系的技术,在MyEclipse环境下进行开发,提供了从设计实体类、配置映射到实现业务逻辑的全套解决方案。通过提供的压缩包文件,...
在实际应用中,我们可以通过Hibernate提供的API来添加、删除和查找多对多关系。例如,向`Student`添加一门`Course`,可以使用`addCourse(Course course)`方法;删除则通过`removeCourse(Course course)`方法。 六、...
总结,"hibernate 一对多,两个实例项目"旨在帮助开发者深入理解Hibernate中的一对多关系映射,并通过实际项目实践来提升技能。通过这两个实例,我们可以学习到如何配置、操作以及优化一对多关系,从而在实际开发中...
在这个项目中,Struts 2被用来处理用户对图书修改和删除的请求,通过Action类定义业务逻辑,并返回相应的视图结果。 **Spring** Spring是Java企业级应用的核心框架,提供依赖注入(DI)和面向切面编程(AOP)等功能...
**标题:“Hibernate多对多”** 在Java编程中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作。在关系数据库中,表与表之间的关系可以是一对一、一对多或多对多。本...
hibernate 一对多和多对一的理解 自己的个人看法 大家也来看看
在这个“hibernate 多对多映射实例,学生 选课”项目中,我们将探讨如何使用Hibernate处理多对多关系,以及如何构建一个学生选课的系统。 首先,我们要理解多对多关系。在现实生活中,学生和课程之间就是一个典型的...
Hibernate 支持多种关联关系,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。关联关系可以通过外键或代理键实现,配置包括懒加载(lazy loading)和级联操作(cascading...
【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...