案例:
员工对部门 (多对一) many-to-one
1,设计实体模型 Department.java (部门实体), Employee.java(员工实体)
__________________________________
Department.java 代码清单
public class Department {
private int id ; //部门ID
private String name ; //部门名称
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Employee.java 代码清单:
public class Employee {
private int id ;
private String name ;
private Department depart ; //这里是重点.将此定为Department对象,hibernate加载一个员工对象时就加载了他所在部门的部门所有信息,
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepart() {
return depart;
}
public void setDepart(Department depart) {
this.depart = depart;
}
}
配置 hbm 文件
Department.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.javaboys.model.Department" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String"/>
</class>
</hibernate-mapping>
Employee.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.javaboys.model.Employee" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String"/>
<many-to-one name="depart" column="depart_id"/>
</class>
</hibernate-mapping>
编码业务操作类:
Hibernate session工厂
HibernateUtil.java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil(){
}
static{
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
}
Many2One.java 多对一例子测试类
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.javaboys.model.Department;
import org.javaboys.model.Employee;
public class Many2One {
/**
* @param args
*/
public static void main(String[] args) {
add();
Employee e = query(1);
System.out.println(e.getDepart().getName());
}
static Department add(){
Session s = null;
try{
Department depart = new Department();
depart.setName("人事部");
Employee emp = new Employee();
emp.setDepart(depart);
emp.setName("a");
s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
s.save(depart);//保存一个部门对象
s.save(emp);//保存员工对象
tx.commit();//事务提交
}finally{
if(s!=null)s.close();
}
return null;
}
//按员工ID查询一个员工对象
static Employee query(int emp_id){
Session s = null;
Employee emp = null;
try{
s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();
emp = (Employee)s.get(Employee.class, emp_id);
Hibernate.initialize(emp.getDepart());//强制加载会话中的实例,
tx.commit();
}finally{
if(s!=null)s.close();
}
return emp;
}
}