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();
}
}