`
阿尔萨斯
  • 浏览: 4201564 次
社区版块
存档分类
最新评论

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();
			}
		}
	}
分享到:
评论

相关推荐

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

    Hibernate 一对多关联映射的测试,主要使用部门与员工的级联关系进行添加测试.

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

    NULL 博文链接:https://elf8848.iteye.com/blog/340767

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

    一个部门有多个员工【一对多映射】 多个员工属于一个部门【多对一映射】 1.2:多对多,举例说明: 项目和开发员工:【双向一对多即多对多映射】 一个项目有多个开发人员【一对多】 一个开发人员参与多个项目【一对多...

    JSP基于SSM实现的和EasyUI公司员工管理系统毕业源代码+文档说明

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    员工管理系统

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    企业人事管理系统数据库

    考核评分、考勤打卡、请假信息,部门,职位等级,加班信息,薪资信息,学历,出差信息跟员工有相关的联系,有相关的关系,例如员工对考核评分一对多关系等。而考核评分属于考核项,它们的关系为1对1关系。请假申请...

    计算机毕业设计项目-双鱼林SSM_EasyUI公司员工管理系统

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    双鱼林SSM_EasyUI公司员工管理系统.zip

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    基于SSM_EasyUI公司员工管理系统

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    双鱼林SSM_EasyUI框架公司员工管理系统 v1.0.rar

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    毕业设计-基于SSM和EasyUI公司员工管理系统,包含源码、数据库文件、演示视频、运行截图、系统说明等

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    SSM_EasyUI公司员工信息管理系统源码 SSMGSYGXXGLXT.rar

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    SSM_EasyUI公司员工管理系统 | 毕业设计

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    基于SSM+EasyUI公司员工管理系统(源码+运行截图+系统说明+数据库).zip

    4 Mybati数据库DAO层采用的是Mapper代理开发方法,输入映射采用的是POJO包装类型实现,输出映射采用了resultMap类型,实现了数据库多对一映射。 5 spring容器内部使用拦截器,以Spring AOP的方式实现事务控制管理。 ...

    文件服务器的搭建-配置与管理.pptx

    徐林 行政部考勤负责人 对共享文件夹里的"考勤资料"有读取、写入权限,对"部门资料"里的"行政部"有修改权,对"部门资料"里其他部门文件为拒绝,除此之外,所有共享文件都为只读权限。 黄红 市场部 对"部门资料"里的...

    基于SSM的简单人事管理系统+源代码+文档说明

    由于职务信息与员工的对应关系是多对多关系,职务关系与部门的对应关系是一对多的关系,所以这里需要两张中间表来维系它们之间的关系 5. 员工信息与职务信息中间表s -------- &lt;项目介绍&gt; 该资源内项目源码是个人的...

    数据库资料

    公司的业务规则概括说明如下:公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等公司按照工时和小时工资率支付工资,...

    springboot-mybatis-vue-培训过程追踪管理系统.zip

    主要用于多维度统计培训过程效果,追踪员工职业生涯初期评价。同时征集,培训过程评价,方便培训过程优化。 Spring Boot、MyBatis和Vue.js是一组流行的技术框架,它们可以被结合用于构建现代化的Web应用程序。一个...

    Mybatis注解与 延时加载(懒加载) 二级缓存注解配置

    8.@Many:实现一对多结果集封装。 9.@CacheNamespace(blocking = true):开启二级缓存 环境: 无映射文件 示例一 CRUD操作 示例 二 多对一 延时加载(懒加载) 根据id查询员工及其员工的部门信息 1.1 User类结构 ...

Global site tag (gtag.js) - Google Analytics