`
fosa0989
  • 浏览: 110237 次
  • 性别: 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-one(多对一)及 cascade(级联).doc

    其中,`many-to-one`(多对一)关系是较为常见的一种,它指的是一个实体可以对应另一个实体中的多个实例。 #### 代码示例解析 在提供的代码示例中,定义了两个实体类:`User` 和 `Group`,其中 `User` 与 `Group` ...

    (4)Hibernate中的many-to-one和one-to-many关系

    many-to-one关系表示在一个实体类中,一个实例可以与另一个实体类的多个实例相关联。例如,在一个学生和班级的关系中,一个班级可以有多个学生,但一个学生只能属于一个班级。在Hibernate中,我们通过`@ManyToOne`...

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

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    Hibernate实现many-to-many的映射关系

    在本文中,我们将深入探讨如何使用Hibernate来实现多对多(many-to-many)的映射关系。 首先,多对多映射关系通常涉及到两个实体类之间的关联,例如在学生选课的例子中,学生(Student)和课程(Course)之间存在多...

    hibernate学习5之one-to-many双向关联.docx

    在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`&lt;many-to-one&gt;`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`&lt;set&gt;`标签,表示班级可以包含多个...

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

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    hibernate5--3.映射关系

    本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)这两种关系。 一、多对多映射(Many-to-Many) 多对多关系在数据库中表现为两个表之间存在多个连接记录,而在对象...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    hibernate many to one

    在Java的持久化框架Hibernate中,"Many-to-One"关系是一种常见的关联映射类型,它表示一个实体(类)可以与多个其他实体实例相关联。在这个主题中,我们将深入探讨Hibernate如何处理这种关系,以及如何在实际编程中...

    Hibernate-Many-to-many-Relationship-in-Spring-MVC:展示如何在 Spring MVC HIbernate 项目中建立多对多关系的示例项目

    总之,"Hibernate-Many-to-many-Relationship-in-Spring-MVC"项目提供了一个完整的实例,演示了如何在实际应用中设置和操作多对多关系。通过学习和理解该项目,开发者可以更好地理解和运用Spring MVC和Hibernate在...

    hibernate最新版jar包(全)

    10. **多对一(One-to-Many)、一对多(Many-to-One)、一对一(One-to-One)、多对多(Many-to-Many)关系**: Hibernate支持这四种数据库关联关系,通过不同的注解配置来实现。 **使用Hibernate的步骤** 1. **...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...

    hibernate-one-to-many-uni

    【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...

    Hibernate-api Hibernate文档

    - Many-to-Many:多对多关联。 十、Inheritance Mapping Hibernate支持三种继承映射策略:Single Table、Table Per Class Hierarchies 和 Table Per Subclass。 十一、Hibernate事件监听 允许自定义监听器,如...

    hibernate中many2many映射

    在Java持久化框架Hibernate中,Many-to-Many(多对多)映射是一种常见的关联关系类型,用于表示两个实体类之间复杂的关系。在本场景中,我们探讨的是如何在Hibernate中配置Many-to-Many映射,并使用MySQL数据库来...

    Hibernate通过Composite-element配置外联表实例 (码)

    标题中的“Hibernate通过Composite-element配置外联表实例”是指在Java持久化框架Hibernate中,使用Composite-element注解或XML配置来处理复杂类型的属性,这些属性通常涉及到一对多或一对一的关系,但它们被存储在...

    hibernate 映射-一对多双向

    4. **多对一关联(Many-to-One Association)**:在子类(被多个父项关联的一方)中,使用`@ManyToOne`注解来定义关联,表示多个实体可以与一个其他实体相关联。 5. **双向关联(Bidirectional Association)**:在...

    Hibernate性能调优

    - **定义**:单向`one-to-many`关联是指一个实体可以拥有多个其他类型的实体实例。 - **示例**:如父实体拥有多个子实体。 - **注意点**:在处理单向`one-to-many`关联时,对集合的操作(如`parent.getChildren()....

Global site tag (gtag.js) - Google Analytics