`

Hibernate一对多与多对一关系映射

    博客分类:
  • ssh
阅读更多
运用部门与员工之间的关系

部门(Department)中有三属性,设置get和set方法

       
   private int did;
	private String dname;
	private Set<Employee> emps;


员工(Employee)也有三个属性,分别生成get和set方法
private int eid;
	private String ename;
	private Department depart;


部门类的xml文件映射(Department.hbm.xml)

<class name="com.cao.po.Department" table="depart">
		<id name="did">
			<generator class="native" />
		</id>
		<property name="dname"/>
		<!-- 映射set集合,key标签用于指定多段外键列名,需要和多端配置的many-to-one标签的列名一致 -->
		<set name="emps">
			<key column="depart_ids"/>
			<!-- class属性用于指定集合内的类型,因为在类中定义用了泛型,所以此处也可不进行指定 -->
			<one-to-many class="com.cao.po.Employee"/>
		</set>
	</class>



员工类的xml文件映射配置(Employee.hbm.xml)


<class name="com.cao.po.Employee" table="emp">
		<id name="eid">
			<generator class="native" />
		</id>
		<property name="ename"/>
		
		<!-- 配置多对一关系,hibernate会根据name的值去实体类中找其定义的类型(此处Department depart),
			然后根据其类型找该类所对应的配置文件Department.hbm.xml,建立关系,
			默认的该列引用一端的id属性列作为外键值,如果想自己指定可以在标签里配置property-ref="指定的列";
		 -->
		<many-to-one name="depart" column="depart_id" />
	</class>



简单的添加操作

public static void add(){
		Session session = HibernateUtil.getSession();
		Transaction ts = HibernateUtil.getTs();
		
		Department depart = new Department();
		depart.setDname("depart1");
		
		Employee emp1 = new Employee();
		//emp和depart建立关系,如果不设置对应的外键值为空
		emp1.setEname("emp1");
		emp1.setDepart(depart);
		Employee emp2 = new Employee();
		emp2.setEname("emp2");
		emp2.setDepart(depart);
		
		//如果同时在一端也进行关系维护的话,会生成两天update语句,如果想取消一端的维护的话可以配置inverse属性
		Set<Employee> eset = new HashSet<Employee>();
		eset.add(emp1);
		eset.add(emp2);
		depart.setEmps(eset);
		
		/*
		 * 必须对部门实体进行保存,因为员工表对部门表进行了引用,
		 * 保存时间可以早于emp,也可晚于emp,但是要在commit之前
		 * 两种情况会生成不同的sql语句,当保存emp早于depart时,会生成3条insert语句和2条update语句,
		 * 两条update语句是更新emp表的外键,因为在保存emp时depart的id为空,当再保存depart时,因为
		 * emp为持久化对象,所以其对应的引用值也会改变
		 * 
		 * 当保存depart在emp之前是只生成3条insert语句
		 */
		session.save(depart);
		session.save(emp1);
		session.save(emp2);
		
		ts.commit();
		session.close();
	}




0
0
分享到:
评论

相关推荐

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

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

    二、多对多映射关系 在关系数据库中,多对多关系是指两个表之间存在多个对应关系。例如,学生可以选修多门课程,而课程也可以被多名学生选修。在Hibernate中,多对多关系通过中间表(也称为联接表或关联表)来实现,...

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

    1. 一对多映射(One-to-Many): 在这种关系中,一个实体(父实体)可以与多个其他实体(子实体)相关联。在Hibernate中,我们通常使用`@OneToMany`注解来表示这种关系。例如,一个学生可以有多个课程,而一门课程...

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

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

    Hibernate一对多映射

    我们来详细探讨一下Hibernate一对多映射的实现方法、配置以及应用场景。 **1. 实体类定义** 在一对多映射中,我们需要至少两个实体类,一个是“一”的一方,另一个是“多”的一方。比如,一个`User`类(“一”方)...

    hibernate一对多、多对一、一对一、多对多配置实例

    本文将深入探讨Hibernate中的一对多、多对一、一对一以及多对多四种关系映射的配置实例,帮助开发者更好地理解和运用这些关系。 ### 一对多关系(One-to-Many) 在数据库设计中,一对多关系是最常见的一种关联,...

    Hibernate一对多,多对一映射

    首先,我们来理解一下一对多映射(One-to-Many Mapping)。在数据库设计中,一对多关系意味着一个父记录可以与多个子记录相关联。在Hibernate中,可以通过配置XML映射文件或使用注解来实现这种关系。例如,假设我们...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

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

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

    hibernate 一对多多对一的映射

    在Hibernate中,可以通过以下方式实现一对多映射: 1. **配置文件映射**:在Hibernate的配置文件(如`hibernate.cfg.xml`)中,声明两个实体类对应的数据库表,并设置关联关系。 2. **实体类定义**:在Java实体类中...

    hibernate学习入门一对多实体映射源码

    在理解了一对多映射后,我们可以通过Hibernate API来处理这种关系: 1. 插入数据时,先创建父实体,然后在子实体中设置父实体的引用,最后保存子实体。Hibernate会自动处理外键的插入。 2. 查询时,可以从父实体...

    hibernate关联映射详解

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

    Hibernate集合映射与关联关系

    本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...

    Hibernate的一对一,一对多,多对多映射

    一对多映射 一对一映射的反面是一对多,一个实体可以对应多个其他实体。这在Hibernate中可以通过`@OneToMany`注解来实现: ```java @Entity public class Department { @Id @GeneratedValue(strategy = ...

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

Global site tag (gtag.js) - Google Analytics