Dept.hbm.xml中
<set name="emps" cascade="save-update,delete" table="t_employee" inverse="false"> <!-- table="t_employee" -->
<key column="dept_id"></key>
<one-to-many class="Employee"/>
</set>
package cn.itcast.b_one2Many;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;
import cn.itcast.a_collection.User;
public class App{
private static SessionFactory sf;
static {
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class) // 测试时候使用
.buildSessionFactory();
}
// 级联保存
@Test
public void save() {
Session session = sf.openSession();
session.beginTransaction();
// 部门对象
Dept dept = new Dept();
dept.setDeptName("财务部");
// 员工对象
Employee emp_zs = new Employee();
emp_zs.setEmpName("张三丰");
Employee emp_ls = new Employee();
emp_ls.setEmpName("李四光");
// 关系
dept.getEmps().add(emp_zs);
dept.getEmps().add(emp_ls);
// 保存
// session.save(emp_zs);
// session.save(emp_ls);
session.save(dept); // 需要设置级联保存; 保存部门,部门下所有的员工 ,三条插入sql
session.getTransaction().commit();//两条update sql
session.close();
}
// 级联删除
@Test
public void delete() {
Session session = sf.openSession();
session.beginTransaction();
Dept dept = (Dept) session.get(Dept.class,7);
session.delete(dept); // 级联删除
session.getTransaction().commit();
session.close();
}
}
Hibernate: insert into t_dept (deptName) values (?)
Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
Hibernate: insert into t_employee (empName, salary, dept_id) values (?, ?, ?)
Hibernate: update t_employee set dept_id=? where empId=?
Hibernate: update t_employee set dept_id=? where empId=?
级联删除
Hibernate: select dept0_.deptId as deptId0_0_, dept0_.deptName as deptName0_0_ from t_dept dept0_ where dept0_.deptId=?
Hibernate: select emps0_.dept_id as dept4_0_1_, emps0_.empId as empId1_, emps0_.empId as empId1_0_, emps0_.empName as empName1_0_, emps0_.salary as salary1_0_, emps0_.dept_id as dept4_1_0_ from t_employee emps0_ where emps0_.dept_id=?
Hibernate: update t_employee set dept_id=null where dept_id=?
Hibernate: delete from t_employee where empId=?
Hibernate: delete from t_employee where empId=?
Hibernate: delete from t_dept where deptId=?