`

【SSH进阶之路】Hibernate映射——多对多关联映射(八)

阅读更多

上篇博文【SSH进阶之路】Hibernate映射——一对多关联映射(七),我们介绍了一对多关联映射,它是多对多关联映射的基础。

多对多映射是现实生活中最常见的映射,也是最容易理解的映射。废话少说,直接开始。

 

映射原理

 

不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联。用第三张表来解决可能会造成数据冗余的问题。

 

举例

 

一个用户(User)对多个角色(Role),一个角色对多个用户。

 

分类

 

单向的多对多关联映射(单向User--->Role)

 

对象模型

关系模型

 

实例

下面我们看一下实体类和映射文件的代码。

User

package com.liang.hibernate;

import java.util.Set;

public class User {
	private int id;
	private String name;
	
	private Set roles;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Set getRoles() {
		return roles;
	}
	public void setRoles(Set roles) {
		this.roles = roles;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Role

package com.liang.hibernate;

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(String name) {
		this.name = name;
	}
}

User.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">
<hibernate-mapping package="com.liang.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<!-- roles属性,表达的是本对象(User)与Role的多对多的关系 -->  
		<set name="roles" table="t_user_role">
            <!--当前表(User)的主键-->
			<key column="user_id"></key>
			<many-to-many class="Role" column="role_id"></many-to-many>
		</set>
	</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">
<hibernate-mapping package="com.liang.hibernate">
	<class name="Role" table="t_role">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
	</class>
</hibernate-mapping>

生成的表结构和测试数据

 

多对多关联映射,在实体类中,跟一对多关联映射一样,也是用集合来表示的。<set>标签中用table属性重命名中间表名称,<key>标签定义当前表的主键,用<many-to-many>标签来关联另一张表。

 

双向的多对多关联映射(双向User<--->Role)

 

 

对象模型

关系模型

 

同上

 

实例

 

下面我们看一下实体类和映射文件的代码。

User

package com.liang.hibernate;
import java.util.Set;

public class User {
	private int id;
	private String name;
	
	private Set roles;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Set getRoles() {
		return roles;
	}
	public void setRoles(Set roles) {
		this.roles = roles;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Role

package com.liang.hibernate;
import java.util.Set;
public class Role {
	private int id;
	private String name;
	private Set users;
	
	public Set getUsers() {
		return users;
	}
	public void setUsers(Set users) {
		this.users = users;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

User.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">
<hibernate-mapping package="com.liang.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<!-- roles属性,表达的是本对象(User)与Role的多对多的关系 -->  
		<set name="roles" table="t_user_role">
            <!--当前表(User)的主键-->
			<key column="user_id"></key>
			<many-to-many class="Role" column="role_id"></many-to-many>
		</set>
	</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">
<hibernate-mapping package="com.liang.hibernate">
	<class name="Role" table="t_role">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<!-- users属性,表达的是本对象(Role)与User的多对多的关系 -->  
		<set name="users" table="t_user_role">
            <!--当前表(Role)的主键-->                
			<key column="role_id"></key>
			<many-to-many class="User" column="user_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

生成的表结构和测试数据

 

多对多双向关系中,User和Role的映射文件相同,值得注意的是生成的中间表名称必须一样,生成中间表的字段必须一样。

 

总结

 

多对多关联映射到此就结束了,经过对一对多关联映射的学习,相对而言,多对多关联映射变得非常的简单了,非常像一对多关联映射的变体。

 

Hibernate的总结篇马上杀到,谢谢关注。

 

分享到:
评论

相关推荐

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...

    hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

    在本章中,我们将深入探讨Hibernate中的关联映射,包括一对多、多对一以及多对多的关系。这些映射关系对于理解如何在Java应用程序中有效地管理数据库对象至关重要。 首先,我们来解决描述中提到的问题。`...

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    多对多的关联映射--基于SSH开发

    总结来说,SSH框架中的多对多关联映射涉及数据库设计、Hibernate配置、Spring事务管理和Struts的请求处理。在实际项目中,开发者需要综合运用这些工具,以实现灵活且高效的多对多关系操作。这包括创建、更新关联关系...

    SSH框架中构建hibernate必须的包

    SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中的一个经典组合。这个框架集合了Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)功能,Struts的MVC(Model-View-Controller...

    SSH笔记-映射文件配置

    本笔记将详细介绍SSH映射文件配置的三个核心部分:基础配置参数使用、多对一映射以及一对多映射。 **基础配置参数使用** SSH的基础配置通常位于`~/.ssh/config`文件中,此文件可以定义不同的主机别名和相关设置。...

    Hibernate映射配置详解

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者将数据库操作转换为对Java对象的操作,极大地简化了数据库编程。SSH是Spring、Struts和Hibernate三个开源框架的简称,常被用于构建...

    hibernate_____实现ssh2用的hibernate

    标题 "hibernate_____实现ssh2用的hibernate" 提到的是在SSH2(Struts、Spring、Hibernate)框架中使用Hibernate的情况。SSH2是中国Java Web开发领域中广泛使用的三大开源框架集成,用于构建高效、可扩展的企业级...

    Hibernate关系映射

    "多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...

    ssh框架中的hibernate5

    以下是对Hibernate 5在SSH框架中的一些关键知识点的详细说明: 1. **实体管理**:Hibernate 5通过Entity Manager API管理数据库实体。实体类代表数据库中的表,通过注解或XML配置文件定义其与数据库表的映射关系。 ...

    ssh(sevrlet+spring+hibernate)整合所需jar包

    SSH整合是Java Web开发中的一种常见模式,它结合了Spring框架、Struts2框架和Hibernate持久化框架,以实现高效、灵活的业务逻辑处理和数据管理。以下将详细阐述SSH整合涉及的关键知识点。 1. Spring框架:Spring是...

    SSH2整合之hibernate3.3 jar包

    在这个"SSH2整合之hibernate3.3 jar包"中,我们主要探讨SSH2框架集成的关键知识点,以及如何使用这些jar包进行项目构建。 首先,让我们深入了解SSH2的三个主要组件: 1. **Struts2**:这是一个基于MVC设计模式的...

    SSH之Hibernate总结

    这包括一对一、一对多、多对一、多对多等各种关系的映射,以及懒加载、级联操作等特性。 9. Hibernate查询(HQL) HQL(Hibernate Query Language)是Hibernate提供的面向对象的查询语言,类似于SQL,但更接近于...

    SSH框架整合中hibernate框架所需要的配置文件

    - **一对一、一对多、多对一、多对多关联映射**:通过`one-to-one`、`one-to-many`、`many-to-one`和`many-to-many`标签定义不同类型的关联关系。 在SSH整合中,Spring框架扮演着管理角色,它可以通过依赖注入...

    hibernate多对多的简单实现

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。在本项目"hibernate多对多的简单实现"中,我们看到的是学生(Student)...

    ssh集成 SPRING STRUTS HIBERNATE

    SSH集成是Java开发中一种常见的框架整合方式,它包含了Spring、Struts和Hibernate这三个开源框架。这三者分别负责不同的职责:Spring作为整体的应用管理框架,Struts处理MVC(模型-视图-控制器)架构,而Hibernate则...

    Maven项目ssh Struts2+hibernate+Spring+maven框架.zip

    SSH(Struts2、Hibernate、Spring)是一个经典的Java Web开发框架组合,用于构建高效、可维护的Web应用程序。在这个Maven项目中,这三个框架与Maven构建工具一起使用,以实现更好的依赖管理和项目构建流程。下面将详细...

    SSH一对多(两表双向关联查询)

    总的来说,SSH一对多(两表双向关联查询)涉及到的主要知识点包括:数据库设计、Hibernate的关联映射、SSH框架的整合、以及单元测试。在实际开发中,理解并熟练掌握这些内容能够帮助我们高效地进行数据操作和业务...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用

    SSH,即Struts2、Hibernate和Spring的组合,是Java Web开发中的一种经典框架集成,用于构建企业级的MVC(Model-View-Controller)应用。这个整合旨在提供一个高效、灵活且可扩展的开发环境,使开发者可以专注于业务...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    SSH(Struts、Spring、Hibernate)是Java Web开发中常用的一种技术栈,其中Hibernate是一个强大的对象关系映射(ORM)框架。这篇文档将详细介绍Hibernate在应用开发中的基础使用,帮助初学者快速入门。 **SSH框架...

Global site tag (gtag.js) - Google Analytics