hibernate--映射关系

many-to- one映射关系

import java.util.Date;

/*
 * Emp-Dept 多对一
 *
 */
public class Emp {
    
    private int empno;
    private String ename;
    private String job;
    private int mgr;
    private Date hireDate;
    private double sal;
    private double comm;
    private Dept dept;  //关联dept实体
    
    

    public Dept getDept() {
        return dept;
    }
    public void setDept(Dept dept) {
        this.dept = dept;
    }

   //此处省略了get/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">
<!-- Generated 2017-3-13 14:24:14 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.yh.manytoOne.Emp" table="hibernate_emp">
    
        <id name="empno" type="int">
            <column name="EMPNO" />
            <!-- <generator class="assigned" />手动输入主键 -->
            <generator class="sequence">
            <param name="sequence">seq_shopid</param>
            </generator>

         <--oracle使用序列 -->

        </id>
        <property name="ename" type="java.lang.String">
            <column name="ENAME" />
        </property>
        <property name="job" type="java.lang.String">
            <column name="JOB" />
        </property>
        <property name="mgr" type="int">
            <column name="MGR" />
        </property>
        <property name="hireDate" type="java.util.Date">
            <column name="HIREDATE" />
        </property>
        <property name="sal" type="double">
            <column name="SAL" />
        </property>
        <property name="comm" type="double">
            <column name="COMM" />
        </property>
         <!--name="dept":Emp实体类对应的Dept实体的属性名称  class:关联的实体类-->
         <!-- fetch:数据的抓取策略 select,join -->
         <!-- lazy:proxy(使用代理并延迟加载),
                no-proxy(不适用代理并延迟加载),
                    false(立即加载) -->
     <many-to-one name="dept" class="com.yh.manytoOne.Dept" lazy="no-proxy" fetch="select">
            <!-- column:对应的表中的外键字段名称 -->
            <column name="dept_no" />
      </many-to-one>

        
    </class>
</hibernate-mapping>


测试类

public void addDept(){

       Session session=DatabaseConnection.getCurrentSession();//获取链接 当tr.commit()执行后会自动关闭链接;

        Transaction tx=session.beginTransaction();
        Dept dept=new Dept();
        dept.setDeptNo(1001);
        dept.setdName("java开发部");
        session.save(dept);
        tx.commit();
    }
    
    public void addEmp(){
        try{
        Session session=DatabaseConnection.getCurrentSession();
        Transaction tx=session.beginTransaction();
        Emp emp=new Emp();
        emp.setEname("yunhe");
        emp.setJob("Java");
        emp.setSal(5600);
        emp.setComm(2800);
        Dept dept=(Dept) session.get(Dept.class, 1001);//必须指定
        
        emp.setDept(dept);

        session.save(emp);
        tx.commit();
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }

//查询数据

public void queryGet(){
        Session session=DatabaseConnection.getSession();
        Emp emp=(Emp) session.get(Emp.class, 49);
        System.out.println("queryGet()");
        session.close();
    }
    
    //load()延迟加载 对象不使用,不发送sql语句
    public void queryLoad(){
        Session session=DatabaseConnection.getSession();
        Emp emp=(Emp) session.load(Emp.class, 49);
        System.out.println("queryLoad()");
        session.close();
    }

------------------------------


/*
 * dept-emp 一对多
 * 在一的一方添加多的一方的集合
 * 实体关联映射文件配置:
 * <set name="集合属性名称">
 * <key>
 * <column name="关联实体的主键的字段名"/>
 * </key>
 * <one-to-many class="关联实体的名称"/>
 * </set>
 *

 */

//one-to- many

public class Dept {
    
    private int deptNo;
    private String dName;
    private Set<Emp> empSet=new HashSet<Emp>();
    
    public Set<Emp> getEmpSet() {
        return empSet;
    }
    public void setEmpSet(Set<Emp> empSet) {
        this.empSet = empSet;
    }

 
      //此处省略了get/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">
<!-- Generated 2017-3-13 14:36:03 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="com.yh.manytoOne.Dept" table="hibernate_dept">
        <id name="deptNo" type="int">
            <column name="DEPTNO" />
            <generator class="assigned" />
        </id>
        <property name="dName" type="java.lang.String" access="field">
            <column name="DNAME" />
        </property>
        <!-- name:集合的属性名称 -->
        <set name="empSet">
        <key>
        <!-- 对应的关联实体类对应的外键字段名 -->
        <column name="dept_no"></column>
        </key>
        <!-- 关联实体 -->
        <one-to-many class="com.yh.manytoOne.Emp"/>
        </set>
        

    </class>
</hibernate-mapping>

测试类

public void query(){
        try{
        Session session=DatabaseConnection.getSession();
        Dept dept=(Dept) session.load(Dept.class, 1001);
        Set<Emp> empSet=dept.getEmpSet();
        System.out.println("长度:"+empSet.size());
        Iterator<Emp> it=empSet.iterator();
        while(it.hasNext()){
            Emp emp=it.next();
            System.out.println("员工编号:"+emp.getEmpno()+"员工名称:"+emp.getEname());
        }
        }catch(Exception e){
        e.printStackTrace();    
        }
        
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值