Hibernate3.2 多对一学习笔记

案例:
      员工对部门 (多对一) 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;
	}
}


你可能感兴趣的:(java,Hibernate,.net,xml,MyEclipse)