`
fosa0989
  • 浏览: 108575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate many-to-many实例

阅读更多
该实例有两个对象User和Group,User和Group建立双向关联关系,有Group来管理关联关系。
1 User.hbm.xml
        <set
            name="groups"
            table="TB_UserGroup"
            lazy="true"
            inverse="true"  //Group来管理关联关系
            cascade="none"  //不使用级联操作
            sort="unsorted"
        >

            <key
                column="UserID"
            >
            </key>

            <many-to-many
                class="com.vo.Group"
                column="GroupID"
                outer-join="auto"
             />

        </set>

2 Group.hbm.xml
        <set
            name="users"
            table="TB_UserGroup"
            lazy="true"
            inverse="false"  //管理关联关系
            cascade="none"   //不使用级联操作 
            sort="unsorted"
        >
            <key
                column="GroupID"
            >
            </key>
            <many-to-many
                class="com.vo.User"
                column="UserID"
                outer-join="auto"
             />

        </set>

3 Group端的操作相对简单点
	public boolean deleteGroup(Long pid) {
		dao.removeObject(Group.class, pid);
		return true;
	}
         //添加修改Group
	public boolean saveGroup(Group p) {
		Long[] users=p.getNewUsers();
		HashSet<User> hs=new HashSet<User>();
		if(users!=null)
			for(int i=0;i<users.length;i++){
				hs.add(new User(users[i]));
			}
		p.setUsers(hs);		
		
		dao.saveObject(p);
		return true;
	}

添加Group的SQL语句:
Hibernate: insert into TB_Group (GroupSN, Name, Description, GroupID) values (?, ?, ?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
修改Group的SQL语句:
Hibernate: update TB_Group set GroupSN=?, Name=?, Description=? where GroupID=?
Hibernate: delete from TB_UserGroup where GroupID=?
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
删除Group的SQL语句:
Hibernate: delete from TB_UserGroup where GroupID=?
Hibernate: delete from TB_GroupPrivilege where GroupID=?
Hibernate: delete from TB_Group where GroupID=?
4 User端的操作复杂一点
	public boolean deleteUser(Long pid) {
		User u=this.getUserByID(pid);
		//删除旧关联的关系
		Set grps=u.getGroups();
		if(grps!=null){
			Iterator it=grps.iterator();
			Group g=null;
			
			while(it.hasNext()){
				g=(Group)it.next();
				g.getUsers().remove(u);
				dao.saveObject(g);
			}						
		}		
		dao.removeObject(User.class, pid);
		//u.setStatus(User.STATUS_UNABLE);//逻辑删除
		//dao.saveObject(u);
		return true;
	}


	public boolean saveUser(User p) {
		//先saveuser
		dao.saveObject(p); //必须先saveUser,因为Group管理管理关系,建立关联关系时候User必须是已经插入数据库

		//删除旧关联的关系
		Set grps=p.getGroups();
		if(grps!=null){
			Iterator it=grps.iterator();
			Group g=null;
			
			while(it.hasNext()){
				g=(Group)it.next();
				g.getUsers().remove(p);
				dao.saveObject(g);
			}						
		}
		
		Long[] groups=p.getNewGroups();			
		//将用户添加到每个组里
		Group g=null;
		if(groups!=null)
			for(int i=0;i<groups.length;i++){
				g=(Group)dao.getObject(Group.class, groups[i]);
				Set users=g.getUsers();
				users.add(p);
				
				dao.saveObject(g);
			}					
		return true;
	}

添加User的SQL:
Hibernate: insert into TB_User (UserSN, LoginName, Password, UserName, Sex, Email, Address, Birthday, PostalCode, MobilePhone, QQ, MSN, Status, OrganizationID, DepartmentID, UserID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
修改User的SQL:
Hibernate: select groups0_.UserID as UserID0_, groups0_.GroupID as GroupID0_ from TB_UserGroup groups0_ where groups0_.UserID=?
Hibernate: select group0_.GroupID as GroupID4_0_, group0_.GroupSN as GroupSN4_0_, group0_.Name as Name4_0_, group0_.Description as Descript4_4_0_ from TB_Group group0_ where group0_.GroupID=?
Hibernate: select users0_.GroupID as GroupID0_, users0_.UserID as UserID0_ from TB_UserGroup users0_ where users0_.GroupID=?
Hibernate: select group0_.GroupID as GroupID4_0_, group0_.GroupSN as GroupSN4_0_, group0_.Name as Name4_0_, group0_.Description as Descript4_4_0_ from TB_Group group0_ where group0_.GroupID=?
Hibernate: select users0_.GroupID as GroupID0_, users0_.UserID as UserID0_ from TB_UserGroup users0_ where users0_.GroupID=?
Hibernate: select group0_.GroupID as GroupID4_0_, group0_.GroupSN as GroupSN4_0_, group0_.Name as Name4_0_, group0_.Description as Descript4_4_0_ from TB_Group group0_ where group0_.GroupID=?
Hibernate: select users0_.GroupID as GroupID0_, users0_.UserID as UserID0_ from TB_UserGroup users0_ where users0_.GroupID=?
Hibernate: update TB_User set UserSN=?, LoginName=?, Password=?, UserName=?, Sex=?, Email=?, Address=?, Birthday=?, PostalCode=?, MobilePhone=?, QQ=?, MSN=?, Status=?, OrganizationID=?, DepartmentID=? where UserID=?
Hibernate: delete from TB_UserGroup where GroupID=?
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
Hibernate: insert into TB_UserGroup (GroupID, UserID) values (?, ?)
删除User的SQL
Hibernate: delete from TB_UserGroup where GroupID=? and UserID=?
Hibernate: delete from TB_UserGroup where GroupID=? and UserID=?
Hibernate: delete from TB_User where UserID=?
0
0
分享到:
评论

相关推荐

    Hibernate应用例子many-to-many

    Hibernate应用例子many-to-many

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    NULL 博文链接:https://liqita.iteye.com/blog/1497077

    hibernate one-to-many 单/双向关联映射配置心得

    NULL 博文链接:https://yinxiaoyong.iteye.com/blog/426752

    HibernateAPI中文版.chm

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    hibernate3.2中文文档(chm格式)

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    Hibernate+中文文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    Hibernate与struts实例 HiberORM1toN

    1.本实例里是结合Hibernate与struts的实例,而Hibernate的ORP采用one-to-many. 2.内含SQL2000对应表的创建 3.是结合Hibernate与struts的非常棒的实例,已经经过 我多次调试,没有问题。

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    Hibernate中文详细学习文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合...

    最全Hibernate 参考文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted ...

    Hibernate 中文 html 帮助文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted ...

    hibernate 体系结构与配置 参考文档(html)

    值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted ...

    Hibernate教程

    7.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted...

    hibernate包的详解以及关系配置实例

    本文档主要介绍hibernate主要包的作用,还有如何使用HQL查询,事务管理的详解,以及一对一、多对多、一对多、多对一关系的配置实例。还有配置文件中的各个属性的作用说明。

    Hibernate3+中文参考文档

    6.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted ...

    Hibernate3的帮助文档

    7.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted...

    本人hibernate学习实例

    本人学习hibernate做的实例,含有proxool数据源,jdbc连接的cfg.xml;one2one,one2many,many2many的例子,本人水平有限,全当新手手记啦 如果某例子不能用,请将hbm.xml下的auto-import="false"改成true(所有例子...

    hibernate一对多例子

    hibernate一对多例子 一对多关联 通过外键 连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义: 一个被包含的实体的实例只能被包含在一个... &lt;one-to-many&gt;标记指明了一个一对多的关联。

    hibernate3.04中文文档.chm

    7.2.4. 值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合...

    hibernate 框架详解

    值集合于多对多关联(Collections of values and many-to-many associations) 7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted ...

Global site tag (gtag.js) - Google Analytics