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

18 篇文章 0 订阅
15 篇文章 0 订阅
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();
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值