`
暗黑小菠萝
  • 浏览: 46941 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Hibernate映射之多对多映射(五)

阅读更多
多对多映射我在实际项目中应用比较少,是一种双向的关联关系。

实现:在数据库中添加中间表来维护两个表的关联关联。
在映射文件中使用<set>标签管理,并在每一个持久化类中添加对方的集合


以员工和项目为背景来看一下具体实现:
一个员工可以参加多个项目,并且一个项目可以有多个员工,这个就是一个多对多映射。

1.如何建立员工和项目之间的关联关系,通过第三个表来实现。
首先来看一下数据库结构:
--员工表
CREATE TABLE EMPLOYEE
(
  ID      NUMBER(10)     NOT NULL,
  EMNAME  VARCHAR2(255 CHAR),
  EMSEX   VARCHAR2(2 CHAR),
  PRIMARY KEY(ID)
)
--项目表
CREATE TABLE PROJECT
(
  ID      NUMBER(10)  NOT NULL,
  PRNAME  VARCHAR2(255 CHAR),
  PRIMARY KEY(ID)
)
--员工项目关联关系表
CREATE TABLE PROEMP
(
  EMP_ID  NUMBER(10)       NOT NULL,
  PRO_ID  NUMBER(10)       NOT NULL,
  PRIMARY KEY(EMP_ID,PRO_ID)
)
--该表的两个外键
ALTER TABLE SUNYQ.PROEMP ADD (CONSTRAINT FK_AAJJDHEGP8CRARVM34YRR639A  FOREIGN KEY (PRO_ID)  REFERENCES SUNYQ.PROJECT (ID),
                              CONSTRAINT FK_4RRTN484UGR027VMDDSPFGFIU  FOREIGN KEY (EMP_ID)  REFERENCES SUNYQ.EMPLOYEE (ID));



2.持久化类
Employee中持有Project的set集合
...
private int emid;

private String emname;

private String emsex;

private Set<Project> proSet = new HashSet<Project>();

public int getEmid() {
	return emid;
}

public void setEmid(int emid) {
	this.emid = emid;
}
...

Project中持有Employee的set集合
...
private int prid;

private String prname;

private Set<Employee> empSet = new HashSet<Employee>();

public Set<Employee> getEmpSet() {
	return empSet;
}

public void setEmpSet(Set<Employee> empSet) {
	this.empSet = empSet;
}
...


3.映射文件
映射文件需要仔细的说明一下:
①Employee.hbm.xml
在Employee持久化类中包含的是Project的set集合:proSet
<set>标签:name就是该对象porSet,table就是关联关系表名叫proemp
<key column="emp_id"/>表示:在proemp表中对应employee表的外键。
<many-to-many />标签:实际的映射关系,Employee与Project的映射关系。


<hibernate-mapping>  
	<class name="com.iteye.sunyq.hibernate.Employee" table="employee">
		<id name="emid" type="integer">
			<column name="id"></column>
			<generator class="native"></generator>
		</id>
		<property name="emname" type="string">
			<column name="emname"></column>
		</property>
		<property name="emsex" type="string" >
			<column name="emsex" length="2"></column>
		</property>
		<!-- name:持久化类中set集合的名称       table:第三方表名 -->
		<set name="proSet" table="proemp">
			<!-- 在第三表里面查询emp_id值相应的employee记录 -->
			<key column="emp_id"></key> 
			<!--对Project表中查找pro_id值相就的project记录 --> 
			<many-to-many class="com.iteye.sunyq.hibernate.Project" column="pro_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping> 

②Project.hbm.xml
在Project.java中包含的是Employee的set集合:empSet
<set标签:name为该集合对象empSet,table为关联关系表名proemp
<key column="pro_id"/>标签:在proemp表中对应Project表的外键字段名
<many-to-many标签:实际的映射关系,与pro_id对应的emp_id的信息

<hibernate-mapping>  
	<class name="com.iteye.sunyq.hibernate.Project" table="project">
		<id name="prid" type="integer">
			<column name="id"></column>
			<generator class="native"></generator>
		</id>
		<property name="prname" type="string">
			<column name="prname"></column>
		</property>
		<set name="empSet" table="proemp">
			<key column="pro_id"></key>
			<many-to-many class="com.iteye.sunyq.hibernate.Employee" column="emp_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping>  


4.测试类
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
Project p1 = new Project("项目一");
Project p2 = new Project("项目二");

Employee e1 = new Employee("小王","男");
Employee e2 = new Employee("小张","女");

p1.getEmpSet().add(e1);//给项目1添加员工1
p1.getEmpSet().add(e2);//给项目1添加员工2

p2.getEmpSet().add(e1);//给项目2添加员工1

session.save(e1);
session.save(e2);
session.save(p1);
session.save(p2);

transaction.commit();
HibernateUtil.closeSession(session);

查看一下执行sql:

在看一下数据库情况:
employee

project

proemp


5.为了提高性能,可以设置inverse来指定维护方,和cascase级联关系方便维护。

  • 大小: 48.8 KB
  • 大小: 15.6 KB
  • 大小: 16.1 KB
  • 大小: 15 KB
0
1
分享到:
评论

相关推荐

    hibernate多对多关联映射

    总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    自动生成hibernate映射文件和实体类

    "自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发时间。下面将详细介绍如何使用 MyEclipse 自动生成 Hibernate 映射...

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    生成hibernate映射文件工具

    hibernate映射文件是Java开发中用于对象关系映射(ORM)的重要组成部分,它将数据库表与Java类之间的关系进行定义,使得开发者无需编写大量的SQL语句,就能实现对数据库的操作。`生成hibernate映射文件工具`是为了...

    Hibernate 映射文件自动生成

    4. **关联(Associations)**:实体之间的关系,如一对一、一对多、多对多等。 5. **继承(Inheritance)**:支持类的继承结构,如单表继承或多表继承。 自动化的映射文件生成通常涉及以下步骤: 1. **分析Java类**...

    hibernate映射和查询

    **hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...

    Myeclipse生成Hibernate映射文件

    而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...

    Hibernate映射笔记

    - `&lt;one-to-one&gt;`、`&lt;many-to-one&gt;`、`&lt;one-to-many&gt;`和`&lt;many-to-many&gt;`:分别用于一对一、一对多、多对一和多对多的关系映射,通过`&lt;class&gt;`元素的嵌套和属性如`inverse`、`cascade`等来控制关系的维护方式和级联...

    hibernate单向多对多映射(XML版)

    本主题聚焦于"hibernate单向多对多映射",特别是在XML配置文件中的实现。在这个过程中,我们将探讨多对多关系的原理,以及如何在Hibernate中通过XML配置文件来定义这种关系。 首先,我们需要理解多对多关系的概念。...

    myeclipse自动生成hibernate映射文件

    Hibernate映射文件是XML格式的文件,它定义了数据库表与Java实体类之间的对应关系,包括字段映射、主键策略、关联关系等。映射文件让开发者无需编写SQL语句,就能通过Java对象进行数据库操作。 2. **MyEclipse ...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    java根据实体类生成Hibernate映射文件

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象...这个过程涉及到Java反射、XML处理以及对Hibernate映射机制的理解,对于深入掌握Java与数据库的交互具有重要的实践意义。

    hibernate(一对多,多对一映射)操作

    本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...

    Hibernate使用 Map实现多对多映射

    在Java的持久化框架Hibernate中,多对多映射是一种常见的关系映射方式,用于处理两个实体类之间一对多或多对一的关系。在这个例子中,我们看到的是`Team`(团队)与`Member`(成员)之间的多对多关系,通过`Map`数据...

    hibernate映射枚举类型

    Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了一种优雅的方式来映射枚举类型到数据库。本文将深入探讨Hibernate如何映射枚举类型,并给出实际应用示例。 ### Hibernate枚举映射方式 #### 1. `@...

    Hibernate映射实例

    确保数据库与Hibernate映射文件一致,能正确地反映实体之间的关系。导入DBO到SQL Server数据库后,就可以通过Hibernate的Session接口进行CRUD(创建、读取、更新、删除)操作了。 在开发过程中,理解并熟练运用这些...

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

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

Global site tag (gtag.js) - Google Analytics