`

8 映射-- 一对多(部门对员工)

阅读更多
package dao.po;

import java.util.Set;

/**
 * 部门类
 * 
 * @author zl
 * 
 */
public class Department
{
	private int				id;	//部门的ID 

	private String			name;	//部门的名称

	private Set<Employee>	emps;	//部门下的所有员工 (一对多关系)
}

 

package dao.po;

/**
 * @author zl 员工类
 */
public class Employee
{
	private int			id;	// 员工的ID 

	private String		name;	// 员工的名称

	private Department	depart; //员工所在部门 (是多对一关系)
}

 

映射文件 :

<?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="dao.po">

	<class name="Department">		
		<id name="id">
			<generator class="native"/>
		</id>		
		<property name="name" not-null="true" length="255" column="`name`"/>
		
		<set name="emps">		<!-- emps 是Department的一个属性 -->	
			<key column="depart_id"></key>	<!-- 通过员工表的 depart_id字段来关联,它是字段名 -->
			<one-to-many class="Employee"/>	<!-- emps的类型是Employee -->
		</set>
	</class>
	
</hibernate-mapping>

      下面是重点:

   <set name="emps">        <!-- emps 是Department的一个属性 -->    
            <key column="depart_id"></key>    <!-- 通过员工表的 depart_id字段来关联,它是字段名 -->
            <one-to-many class="Employee"/>    <!-- emps的类型是Employee -->
        </set>

<?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="dao.po">

	<class name="Employee">		
		<id name="id">
			<generator class="native"/>
		</id>		
		<property name="name" not-null="true" length="255" column="`name`"/>
		<!-- 这里做多对一映射    -->
		<!-- name="depart"是Employee类的属性名 -->
		<!-- column="depart_id" 是表中字段名 -->
		<!--  -->
		<many-to-one name="depart" column="depart_id" not-null="true"></many-to-one>
	</class>
	
</hibernate-mapping>

 

 

一对多 (一个部门 对 多个员工)

查询部门(部门下有员工)

public static void main(final String[] args)
	{
		final Department de = query(2);
		final Set<Employee> set = de.getEmps(); //本部门的所有员工
		for (final Employee em : set)
		{
			System.out.println(em.getName());
		}
	}

	/**
	 * 查询部门(部门下有员工)
	 * 
	 * @param id
	 *            部门ID
	 * @return 部门对象
	 */
	public static Department query(final int id)
	{
		Session session = null;
		try
		{
			session = HibernateUtil.getSeesion();
			final Transaction tx = session.beginTransaction();
			final Department de = (Department) session.get(Department.class, id); //按ID查	

			//因为 部门的 "员工" 属性会懒加载,
			//在session关闭后,调用de.getEmps()无法取到员工信息
			//所以这里用 Hibernate.initialize(de.getEmps()) 提前加载一下.			
			Hibernate.initialize(de.getEmps());

			tx.commit();
			return de;
		}
		finally
		{
			if (session != null)
			{
				session.close();
			}
		}
	}
分享到:
评论
2 楼 明天的昨天 2010-03-15  
楼主我个应该是 一对多种的 双向关联
单向关联是否能够再总结下

Hibernate 一会单向 一会双向 很难分辨啊
不知道楼主是否有较好的学习方法
1 楼 keer2345 2009-04-28  
谢谢,真正的学到了一些东西。简单而有用,支持一下~~

相关推荐

    7 映射-- 多对一(员工对部门)

    本文将深入探讨“7 映射-- 多对一(员工对部门)”这一主题,它主要涉及Java持久化框架Hibernate中的对象关系映射(ORM)技术。 在企业信息系统中,员工和部门的关系通常表现为多对一的关系。这意味着一个部门可以有...

    Spring+Hibernate一对多关联映射---部门与员工表的级联添加

    本教程将深入探讨Spring和Hibernate结合使用时的一对多关联映射,特别是部门与员工表的级联添加。 在数据库设计中,一对多关联是一个常见的关系类型,例如一个部门可以有多名员工,但每个员工只能属于一个部门。在...

    MyBatis高级映射(一对多查询)

    在数据库关系模型中,一对多关系是常见的关联类型,例如一个学生可以对应多个课程,一个部门可以有多个员工等。MyBatis提供了一对多映射功能,使得在Java对象中可以直接获取到这种关联关系的数据。 1. **配置一对多...

    ibatis 一对多关系映射

    Ibatis,作为一个轻量级的Java ORM框架,提供了强大的功能来处理复杂的数据映射,其中包括一对多的关系映射。在这个场景下,我们将深入探讨Ibatis如何实现一对多的关系映射。 一对多关系在数据库设计中非常常见,它...

    MyBatis一对多映射

    一对多映射指的是一个父类实体对应多个子类实体的关系,例如一个学生可以有多个课程,一个部门可以有多名员工等。 一、一对多映射的基本概念 在数据库中,如果一个表的记录(主表)与另一个表的记录(从表)之间...

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

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

    Hibernate一对多映射

    在Java的持久化框架Hibernate中,一对多映射是一种常见的对象关系映射(ORM)配置方式,用于模拟数据库中的关联关系。在这个场景中,一个实体(类)可以拥有多个其他实体实例,就像在数据库中一个表的一条记录可以...

    Hibernate一对多单向关联映射

    一对多关联意味着一个实体(如部门)可以有多个关联实体(如员工),而反过来,每个员工只属于一个部门。单向关联则表示只有部门知道其下的所有员工,员工并不知道它们所属的部门。 二、配置映射文件 在Hibernate中...

    Hibernate持久化映射一对多和多对一

    一对多映射表示一个实体(如部门)可以关联多个实体(如员工)。在数据库层面,这通常表现为一个表(部门表)的记录对应另一个表(员工表)的多个记录。 **配置方式**: 在Hibernate中,一对多映射通过`&lt;set&gt;`或`...

    MyBatis关联映射:一对一、一对多-代码.zip

    对于一对多的关系,例如一个部门有多名员工,MyBatis提供了以下方法进行映射: 1. **使用collection标签**:在resultMap中使用collection标签,指定一对多关联的集合类型(如List),通过column属性设置关联的外键...

    EF6多对多,一对多关系映射样例代码

    在本示例中,我们将深入探讨如何在EF6中配置和使用多对多和一对多关系,特别是针对Oracle数据库的配置。 首先,多对多关系是指两个实体类型之间存在多个连接,每个实体都可以关联到多个实例。例如,一个学生可以...

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

    在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...

    Hibernate之关联关系映射(一对多和多对一映射,多对多映射).docx

    `表示一个部门可以拥有多个员工,这是一个一对多关系。而在`Employee`类中,`private Dept dept;`表示一个员工隶属于一个部门,这是多对一关系。在映射配置文件中,需要使用`@OneToMany`和`@ManyToOne`注解来指定...

    hibernate对映射xml的一对多的双向关联详解

    在数据库设计中,一对多关联是指一个实体可以与多个其他实体相关联,比如一个学生可以有多个课程,一个部门可以有多名员工。在Hibernate中,这种关系可以通过XML映射文件来配置。首先,我们需要在两个实体的映射文件...

    一对多单向和双向映射

    在数据模型中,一对多关系是常见的映射类型,包括单向和双向映射。本文将深入探讨这两种映射方式,并通过 Hibernate 框架的配置来解释其实现细节。 首先,一对多关系意味着一个实体可以与多个其他实体相关联。例如...

    EJB3一对多和多对一关系映射实例

    在现实世界中,一对多关系非常常见,例如一个班级有多名学生,一个部门有多名员工。在EJB3中,我们可以通过`@OneToMany`注解来表示这种关系。以下是一个简单的例子: 1. 定义父类("多"的一方): ```java @Entity ...

    oracle 数据库关系映射

    为了正确地将一对多关系映射到数据库中,需要在“多”的一端创建外键指向“一”的一端。 - 例如,在员工和部门的关系中,一个部门可以有多个员工。因此,在员工表中添加一个部门ID的外键字段,用来引用部门表中的...

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

    本文将深入探讨如何利用Hibernate实现数据库表间的一对一、一对多和多对多映射,并通过示例代码演示如何向数据库添加数据。 ### 1. 一对一映射 一对一映射通常用于表示两个实体之间有唯一对应关系的情况。在...

    Mybatis一对一一多映射.rar

    比如,一个部门可以有多个员工,部门与员工的关系就是一对多。在MyBatis中,使用`&lt;collection&gt;`标签来处理这种关系。同样,设置`property`为Java对象中的集合字段名,`javaType`通常为List或Set,` ofType`指定集合...

Global site tag (gtag.js) - Google Analytics