`
smiky
  • 浏览: 257791 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

many-to-many(多对多关联)

阅读更多

多对多关联是常见的一种关联关系,如User与Role,一个用户可以对应多个角色,一个角色也可以对应多个用户。

要理解这个映射关系,必须了解set及many-to-many这两个标签中的相关属性。

下面以User与Role为例:

1.POJO类

User类

public class User {

	private int userId;
	private String userName;
	private Set roles;
//...set/get
}

 Role类

public class Role {

	private int roleId;
	private String roleName;
	private Set users;
//...get/set
}

 2.映射文件

User.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.manytomany.pojo">
	<class name="User" table="t_user">
		<id name="userId" type="integer">
			<generator class="identity"></generator>
		</id>
		<property name="userName" type="string" ></property>
		<set name="roles" table="t_role_user">
			<key column="userId"/>
			<!-- key定义集合表到其拥有表的外键 -->
			<many-to-many class="Role" column="roleId"/>
			<!-- many-to-many 集合表到该元素的外键 -->
		</set>
	</class>
</hibernate-mapping>

 Role.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.manytomany.pojo">
	<class name="Role" table="t_role">
		<id name="roleId" type="integer">
			<generator class="identity"></generator>
		</id>
		<property name="roleName" type="string" ></property>
		<set name="users" table="t_role_user">
			<key column="roleId"/>
			<!-- key中的 property-ref用于指定主非键的列作为参考外键,也就是说默认情况下会用主表的主键作为
				集合表的外键,在这里就是默认为t_role的主键作为t_role_user的外键
			 -->
			<many-to-many class="User" column="userId" />
			<!--
			 	column(必需):   这个元素的外键关键字段名  
			 	property-ref:	用于指定关联类(User)连接到外键的属性,即那个字段与集合表t_role_user中的
			 	userId关联,如果没指定就默认为关联类(User)的主键
			  -->
		</set>
		<!-- 
			使用<key>元素来申明从集合表到其拥有者类的表
			(from the collection table to the table of the owning class)的外键关键字。     
 			 <key column="column_name"/>   
   			 column(必需):外键字段的名称     
		 -->
	</class>
</hibernate-mapping>

 set用于映射集合,name表示属性名称,table表示集合对应的集合表

key:用于定义连接表中的外键,默认引用主表中的主键作外键

     column表示外键名称

     property-ref,上面有讲

 

对于key与many-to-many的作用就在于定义好集合表中的外键名称,及外键引用的是主表中的那个字段.

3.测试

导出表

public static void exportSchema(){
		SchemaExport schemaExport = new SchemaExport(configuration);
		schemaExport.create(true, true);
	}

 结果为

create table t_role (roleId integer not null auto_increment, roleName varchar(255), primary key (roleId))
create table t_role_user (userId integer not null, roleId integer not null, primary key (roleId, userId))
create table t_user (userId integer not null auto_increment, userName varchar(255), primary key (userId))
alter table t_role_user add index FK32E9F7E9217E219A (roleId), add constraint FK32E9F7E9217E219A foreign key (roleId) references t_role (roleId)
alter table t_role_user add index FK32E9F7E926D37704 (userId), add constraint FK32E9F7E926D37704 foreign key (userId) references t_user (userId)
构建了三张表,两张主表,一张中间表,并取主表主键作为中间表的外键。

 

 

分享到:
评论

相关推荐

    hibernate many-to-many级联保存,级联更新,级联删除

    在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门课程,而一门课程也可以被多名学生选修。在Hibernate中,这种关系通过中间关联表(也称为连接表或联合表)来实现,该...

    Hibernate one-to-many / many-to-one关系映射

    一、一对一(one-to-one)与一对多(one-to-many)关系 1. 一对一关系: 在现实世界中,如一个人只有一个身份证,这就是典型的"一对一"关系。在Hibernate中,可以通过@OneToOne注解实现。这种关系通常需要使用外键...

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

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    ### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...

    Many-to-one关联映射

    关联映射的本质: 将关联关系映射到数据库,所谓的...&lt;many-to-one&gt;会在多的一端加入一个外键,指向一的一端,这个外键是由&lt;many-to-one&gt; 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致

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

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

    Hibernate Many-To-Many Mapping Annotations

    在关系数据库中,当一个表的记录可以与另一个表中的多个记录相关联,同时另一个表的记录也可以与第一个表中的多个记录相关联时,我们称这种关系为多对多(Many-to-Many)。例如,学生和课程的关系就是一个典型的Many...

    Many-To-Many_Element.rar_hibernate 多对多

    在现实世界的数据模型中,很多情况下存在多对多(Many-to-Many)的关系,例如学生与课程的关系,用户与角色的关系等。本教程主要讲解如何使用Hibernate来处理多对多的关联映射,尤其是基于HashMap的实现方式。 首先...

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

    在Hibernate框架中,双向一对多关联映射是常见的对象关系映射(ORM)方式,用于在Java对象模型中表示数据库中的两个实体之间的多对一关系。在这个场景中,"一"端通常指的是一个实体可以拥有多个另一个实体的实例,而...

    Hibernate many-to-many

    "Hibernate many-to-many"指的是Hibernate中处理多对多关联关系的一种方式。多对多关系是两个实体类之间存在的一种复杂关联,比如学生和课程之间的关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修。 ...

    Hibernate应用例子many-to-many

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

    Hibernate Tutorial 04 (Many-to-one and One-to-one Association

    #### 一、多对一关联(Many-to-One) 在本章中,我们将探讨如何在 Hibernate 中处理多对一关联。这种关联类型非常常见,在许多应用中都会遇到。例如,在一个在线书店应用中,每本书都与一个出版商关联,而一个出版...

    (5)Hibernate中的many-to-many和并发

    在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据模型,它表示一个实体可以与多个其他实体之间存在关联,反之亦然。这篇博客文章可能会深入探讨如何在Hibernate中处理这种多对多的关系,并可能涉及...

    hibernate多对多双向关联

    多对多双向关联 &lt;br&gt;注意映射规则: &lt;set name="roles" table="t_user_role"&gt;&lt;br&gt; &lt;key column="userid"/&gt;&lt;br&gt; &lt;many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/&gt;&lt;br&gt; &lt;/set&gt;&lt;br&gt;&lt;br&gt;table...

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

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

    hibernate 关联映射(一) many to one

    在数据库中,这通常表现为一对多(One-to-Many)的关系,但在对象模型中,由于我们是从一个对象的角度出发,所以称为Many-to-One。 在Hibernate中实现Many-to-One关联,我们需要在实体类中定义对应的属性,并通过...

    Hibernate one-to-many-annotation

    在Java世界中,Hibernate是一个非常...总结,`Hibernate one-to-many`注解是处理实体间多对一关系的关键工具,它简化了数据库操作,提升了开发效率。正确理解和使用这些注解,对于构建高效、可维护的Java应用至关重要。

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    在处理一对多或多对一的关系时,抓取策略起着决定性的作用,它关乎到性能和内存效率。 首先,我们需要了解什么是抓取策略。在Hibernate中,抓取策略决定了如何从数据库中加载关联的对象。默认情况下,当加载一个...

    NHibernate One-to-Many一对多映射-xxlinux_com

    在数据库世界中,一对多(One-to-Many)关系是一种常见的关联类型,其中一个表(父表)可以与多个其他表(子表)相关联。在NHibernate中,配置这种映射关系对于理解和使用ORM至关重要。 一对多关系意味着一个实体...

    Hibernate one to many(many to one) 配置

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

Global site tag (gtag.js) - Google Analytics