多对一是最常见,也是最理解的一种关联。比如多个员工属于同一个部门,多个产品属于同一个类别,单项的多对一指的是多方可以访问一方,而一方不知道多方的存在。
测试类
多对一
package com.hbsi.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hbsi.domain.Department;
import com.hbsi.domain.Employee;
import com.hbsi.hibernate.utils.HibernateUtil;
public class Many2One {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
add();
}
//
static Department add(){
Session s=null;
Transaction tx=null;
try{
s=HibernateUtil.getSession();
tx=s.beginTransaction();
//增加
Department dep=new Department();
dep.setName("depart one");
Employee el=new Employee();
el.setName("Tom");
el.setDepart(dep);//对象模型:两个对象建立关联关系
s.save(dep);
s.save(el);
tx.commit();
return dep;
}finally{
if(s!=null)
s.close();
}
}
}
一对多
例如部门Department和员工Employee的关系,
分析:一个部门可以有多个员工但是一个员工只能对应一个部门;
1:倒如相应的文件驱动;
2:建立相应的Department类和Employee类
3; 建立相应的映射文件 Employee是1 的一方所以他的映射文件就是普通方式
的建立;Department是多的一方所以又给他添加了一个属性Employee对象的set集合名字是个empt 在写属性的该映射文件时:
<set name=”empt”>
<key name=”empt_id”/>
<one-to-many class=”Employee”>
</set>
4:建立相应的工具包并建立相应的HibernateUtil类实现获取session对象
static{
//’获取配置对象
Configuration cfg=new Configuration();
cfg.configure();//初始化
//获取session工厂
sessionFactory=cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
//启动session
return sessionFactory.openSession();
测试类
package com.hbsi.test;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.hbsi.domain.Department;
import com.hbsi.domain.Employee;
import com.hbsi.hibernate.utils.HibernateUtil;
public class One2Many {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
add();
queryDepartment(1);
}
static Department add() {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
// 增加
Department dep = new Department();
dep.setName("depart one");
Employee el = new Employee();
el.setName("Tom");
el.setDepart(dep);// 对象模型:两个对象建立关联关系
Employee e2 = new Employee();
e2.setName("Jerry");
e2.setDepart(dep);
s.save(dep);
s.save(el);
s.save(e2);
tx.commit();
return dep;
} finally {
if (s != null)
s.close();
}
}
static Department queryDepartment(int depId) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
// 查询
Department d = (Department) s.get(Department.class, depId);
System.out.println(d.getName() + " 有 " + d.getEmps().size()
+ "个员工");
tx.commit();
return d;
} finally {
if (s != null)
s.close();
}
}
}