Hibernate 关系映射之多对多关联
现实中的对象之前的关系大多是多对多的关系,因为一对一,多对一,一对多的关系都可以归结到多对多关系的一种特殊情况。
多对多关系实现的方式:
新建一张中间表,2个字段外键关联对应2张表的id,用2个多对一的关系实现多对多关联。
一、多对多单向关联
场景:以用户(User)和角色(Role)关系为例 。
一个用户对应多种角色,一种角色对应多个用户。
- 对象关联
实体类User
public class User { private int id; private String name; private Set<Role> roles; public int getId() {return id;} public void setId(int id) {this.id = id;} public String getName() {return name;} public void setName(Stringname) {this.name = name;} public Set<Role> getRoles() {return roles;} public void setRoles(Set<Role> roles) {this.roles = roles;} }
实体类Role
public class Role { private int id; private String name; public int getId() return id;} public void setId(int id) {this.id = id;} public String getName() {return name;} public void setName(Stringname) { this.name = name;} }
- 关系模型
- 关联映射
1.xml方式
在 一方添加<set>标签 映射多对多(映射set集合),name=集合对象,然后在用<key>标签定义外键。<many-to-many>标签设置映射的类实体
<!--Role.hbm.xml--> <class name="com.yk.hibernate.Role" table="role"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> </class> <!--User.hbm.xml--> </span><class name="com.yk.hibernate.User" table="user"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> <set name="users" table="user_role"order-by="userId"></span> <key column="role_id"/> <many-to-many class="com.yk.hibernate.User" column="user_id"/> </set> </class>
2.annotation方式
在一方类 的“多(set<E>)”对象getter方法上添加注解@ManyToMany 注解,并使用@JoinTabel来注解第三方表的名称,再使用joinColumns属性来指定当前对象User在中间表中的字段名, 再用inverseJoinColumns来指定当前类持有引用的实体对象Role在中间表的字段名,并且指向被引用对象相对应的表,如下:
@ManyToMany @JoinTable(name="user_role", joinColumns={@JoinColumn(name="user_id")}, inverseJoinColumns={@JoinColumn(name="role_id")} ) public Set<User> getRoles() {return roles;}
二、多对多双向关联
场景:以上述场景为例
- 对象模型:同上
- 关系模型:同上
- 关联映射
1.xml方式:
在单向关联的基础上,在另一个映射文件建立同样的many-to-many标签
<!--User.hbm.xml--> <class name="com.yk.hibernate.User" table="user"> <id name="id"> <generator class="native"/> </id> <property name="name" column="name"/> <set name="users" table="user_role"order-by="userId"> <key column="role_id"/> <many-to-many class="com.yk.hibernate.User" column="user_id"/> </set> </class>
2.annotation方式
多对多关联映射 双向 两方都持有对象引用,修改对象模型,但数据的存储没有变化
只需要修改注解映射就可以了。
在单向关联的基础上,另一个类的Set<E>对象上加上注释mappedBy
User.java
@ManyToMany @JoinTable(name="user_role", joinColumns={@JoinColumn(name="user_id")}, inverseJoinColumns={@JoinColumn(name="role_id")} ) public Set<User> getRoles() {return roles;}
Role.java
@ManyToMany(mappedBy="roles") public Set<User>getUsers() {return users;}
相关推荐
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...
本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...
本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...
综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...
### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...
本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...
其中,“关联映射”是Hibernate中的一个重要概念,用于处理实体之间的关联关系,例如一对一、一对多、多对一以及多对多等。 #### 常用属性解析 为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解...
Hibernate4中映射关系图解。
【hibernate的关联关系映射】在Java持久化框架Hibernate中,关联关系映射是核心功能之一,它允许对象间的复杂关系与数据库中的表结构相匹配。在选课系统这个例子中,主要涉及到的对象包括课题(Course)、教师(Teacher...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...
Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者
9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...
"多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...
"hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...
本资料包主要关注的是Hibernate中的关系映射,特别是多对多(ManyToMany)关系,这对于理解和实现复杂的数据库模型至关重要。在Spring+Hibernate+Struts框架下,这种映射关系的应用更是常见。 首先,我们需要了解在...