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

Java代码   收藏代码
  1. package dao.po;  
  2.   
  3. import java.util.Set;  
  4.   
  5. /** 
  6.  * 部门类 
  7.  *  
  8.  * @author zl 
  9.  *  
  10.  */  
  11. public class Department  
  12. {  
  13.     private int             id; //部门的ID   
  14.   
  15.     private String          name;   //部门的名称  
  16.   
  17.     private Set<Employee> emps;   //部门下的所有员工 (一对多关系)  
  18. }  

 

Java代码   收藏代码
  1. package dao.po;  
  2.   
  3. /** 
  4.  * @author zl 员工类 
  5.  */  
  6. public class Employee  
  7. {  
  8.     private int         id; // 员工的ID   
  9.   
  10.     private String      name;   // 员工的名称  
  11.   
  12.     private Department  depart; //员工所在部门 (是多对一关系)  
  13. }  

    伦理片 http://www.dotdy.com/

映射文件 :

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping   
  6.     package="dao.po">  
  7.   
  8.     <class name="Department">       
  9.         <id name="id">  
  10.             <generator class="native"/>  
  11.         </id>       
  12.         <property name="name" not-null="true" length="255" column="`name`"/>  
  13.           
  14.         <set name="emps">     <!-- emps 是Department的一个属性 -->      
  15.             <key column="depart_id"></key>  <!-- 通过员工表的 depart_id字段来关联,它是字段名 -->  
  16.             <one-to-many class="Employee"/>   <!-- emps的类型是Employee -->  
  17.         </set>  
  18.     </class>  
  19.       
  20. </hibernate-mapping>  

      下面是重点:

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

Xml代码   收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping   
  6.     package="dao.po">  
  7.   
  8.     <class name="Employee">         
  9.         <id name="id">  
  10.             <generator class="native"/>  
  11.         </id>       
  12.         <property name="name" not-null="true" length="255" column="`name`"/>  
  13.         <!-- 这里做多对一映射    -->  
  14.         <!-- name="depart"是Employee类的属性名 -->  
  15.         <!-- column="depart_id" 是表中字段名 -->  
  16.         <!--  -->  
  17.         <many-to-one name="depart" column="depart_id" not-null="true"></many-to-one>  
  18.     </class>  
  19.       
  20. </hibernate-mapping>  

 

 

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

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

Java代码   收藏代码
  1. public static void main(final String[] args)  
  2.     {  
  3.         final Department de = query(2);  
  4.         final Set<Employee> set = de.getEmps(); //本部门的所有员工  
  5.         for (final Employee em : set)  
  6.         {  
  7.             System.out.println(em.getName());  
  8.         }  
  9.     }  
  10.   
  11.     /** 
  12.      * 查询部门(部门下有员工) 
  13.      *  
  14.      * @param id 
  15.      *            部门ID 
  16.      * @return 部门对象 
  17.      */  
  18.     public static Department query(final int id)  
  19.     {  
  20.         Session session = null;  
  21.         try  
  22.         {  
  23.             session = HibernateUtil.getSeesion();  
  24.             final Transaction tx = session.beginTransaction();  
  25.             final Department de = (Department) session.get(Department.class, id); //按ID查      
  26.   
  27.             //因为 部门的 "员工" 属性会懒加载,  
  28.             //在session关闭后,调用de.getEmps()无法取到员工信息  
  29.             //所以这里用 Hibernate.initialize(de.getEmps()) 提前加载一下.            
  30.             Hibernate.initialize(de.getEmps());  
  31.   
  32.             tx.commit();  
  33.             return de;  
  34.         }  
  35.         finally  
  36.         {  
  37.             if (session != null)  
  38.             {  
  39.                 session.close();  
  40.             }  
  41.         }  
  42.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值