实例:Emp(员工)、Dept(部门)
pojo:Emp
private Dept dept;//部门(多对一)
pojo:Dept
private Set<Emp> emps=new HashSet<Emp>();//部门员工集合(一对多)
Emp.hbm.xml:
<!-- <property name="deptNo" type="java.lang.Byte" column="`DEPTNO`"></property> -->
<!-- Emp类到Dept类的单向多对一映射,多个员工对应一个部门 -->
<!-- name:设定持久化类的属性名,此处为Emp的dept属性 -->
<!-- column:设定持久化类的属性对应的表的外键,此处为EMP表的外键DEPTNO -->
<!-- class:设定持久化类的属性的类型,此处设定dept属性的类型为Dept -->
<many-to-one name="dept" class="cn.hibernate.pojo.Dept" column="`DEPTNO`"/>
Dept.hbm.xml:
<!-- name设定持久化类的属性名,此处为Dept类的emps属性 -->
<!-- column设定与所关联的持久化类相对应的表的外键,此处为EMP表的DEPTNO字段 -->
<!-- one-to-many表示emps集合中存放的是一组Emp对象 -->
<!-- key子元素表示EMP表通过外键DEPTNO参照DEPT表 -->
<!-- cascade(级联) save-update表示当通过Session的save()、update()、saveOrUpdate()保存或更新当前对象的时候,级联保存所有关联的瞬时状态的对象,并且级联更新所有关联的游离状态的对象 -->
<!-- cascade(级联) delete表示当通过Session的delete()删除当前对象的时候会级联删除所有关联的对象 -->
<!-- cascade(级联) all表示包含save-update、delete的行为 -->
<set name="emps" cascade="all">
<key column="`DEPTNO`"></key>
<one-to-many class="cn.hibernate.pojo.Emp"/>
</set>
EmpDao:
public void save(Emp emp){
currentSession().save(emp);
}
public List<Emp> findByDept(Dept dept){
return currentSession().createQuery("from Emp where dept=?").setParameter(0, dept).list();
}
public List<Emp> findAll(){
return currentSession().createQuery("from Emp").list();
}
DeptDao:
public void save(Dept dept) {
currentSession().save(dept);// 保存指定的dept对象
}
public void delete(Dept dept) {
currentSession().delete(dept);// 删除指定的dept对象
}
EmpService:
public void addEmp(Emp emp){
Transaction tx=null;
try {
tx=empDao.currentSession().beginTransaction();
empDao.save(emp);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
}
public List<Emp> findEmpsByDept(Dept dept){
Transaction tx=null;
List<Emp> empList=null;
try {
tx=empDao.currentSession().beginTransaction();
empList=empDao.findByDept(dept);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
return empList;
}
public List<Emp> findAllEmps(){
Transaction tx=null;
List<Emp> empList=null;
try {
tx=empDao.currentSession().beginTransaction();
empList=empDao.findAll();
for (Emp emp : empList) {
System.out.println("员工姓名:"+emp.geteName());
System.out.println("所在部门:"+emp.getDept().getdName());
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
if(tx!=null){
tx.rollback();
}
}
return empList;
}
DeptService:
public void addNewDept(Dept dept){
Transaction tx=null;
try {
tx=HibernateUtil.currentSession().beginTransaction();//开启事务
deptDao.save(dept);//调用DAO方法,保存dept对象的数据
tx.commit();//提交事务
} catch (HibernateException e) {
if(tx!=null){
tx.rollback();//回滚事务
}
e.printStackTrace();
}
}
public void deleteDept(Byte id){
Transaction tx=null;
try {
tx=HibernateUtil.currentSession().beginTransaction();//开启事务
deptDao.delete(deptDao.get(id));//调用DAO的删除方法(参数为加载的对象)
tx.commit();//提交事务
} catch (HibernateException e) {
if(tx!=null){
tx.rollback();//回滚事务
}
e.printStackTrace();
}
}
Test:
/*Emp emp=new Emp();
emp.setEmpNo(12);
emp.seteName("周永强");
Dept dept=new Dept();
dept.setDeptNo((byte)30);
emp.setDept(dept);
new EmpService().addEmp(emp);*/
/*Dept dept=new Dept();
dept.setDeptNo((byte)30);
List<Emp> empList=new EmpService().findEmpsByDept(dept);
for (Emp emp : empList) {
System.out.println(emp.geteName());
}*/
/*new EmpService().findAllEmps();*/
/* Dept dept=new Dept((byte) 6, "生化部");
Emp emp=new Emp();
emp.setEmpNo(13);
emp.seteName("剑圣");
emp.setDept(dept);
dept.getEmps().add(emp);
new DeptService().addNewDept(dept);*/
new DeptService().deleteDept((byte) 6);