如何在hibernate中进行双向多对多映射的情况下删除记录

时间:2017-05-04 21:03:43

标签: java hibernate orm hql hibernate-mapping

我有两个表,一个是FlxG.collide,另一个是Employee。我使用第三个表Depts在它们之间实现了双向多对多映射。现在我想从EMPLOYEE_DEPT表中删除一个员工及其所有部门。我怎么能这样做?

我试过

Depts

然后按如下方式删除该员工:

Set setOfEmp = dept.getEmployees();     
for(Object obj : setOfEmp){
    Employee emp= (Employee)obj;
    emp.removeDept(dept);
}
deptManager.removeDepartment(dept);

这给了我错误

  

乐观锁定失败(嵌套异常是org.hibernate.StaleObjectStateException:行被另一个事务更新或删除了)

我尝试的第二种方法是先从员工中删除部门并删除

empManager.removeEmployee(emp);

这给了我错误

  

java.sql.SQLIntegrityConstraintViolationException:ORA-02292:违反完整性约束(SYSTEM.SYS_C007682) - 找到子记录

除上述代码外,保存代码如下:

首先创建员工,然后保存部门

emp.getDept().remove(dept);
dept.getEmployees().remove(emp);
empManager.removeEmployee(emp);
deptManager.removeDepartment(dept);

Hibernate中两者的映射如下:

Employee emp = new Employee();
emp.setName("testingEmployee");
emp.setDept(new HashSet());
empManager.saveEmployee(emp);

Department dept = new Department();
dept.setName("testDept");
Set setOfDept = new HashSet();
setOfDept.add(dept);

Set setOfEmp = new HashSet();
setOfEmp.add(emp);
dept.setEmployees(setOfEmp);
emp.setDept(setOfDept);
empManager.saveEmployee(emp);
deptManager.saveDept(dept);

这是<set name="departments" table="EMP_DEPTS" lazy="false" cascade = "all"> <key column="EMP_ID"/> <many-to-many class="com.model.Department" column="DEPT_ID"/> </set> Department文件中Employee的设置映射。.hbm Department中的一组员工映射如下:

.hbm

0 个答案:

没有答案