Java hibernate中双向多对多映射时如何删除记录

Java hibernate中双向多对多映射时如何删除记录,java,hibernate,orm,hql,hibernate-mapping,Java,Hibernate,Orm,Hql,Hibernate Mapping,我有两个表,一个是Employee,另一个是Depts。我使用第三个表EMPLOYEE\u DEPT实现了它们之间的双向多对多映射。现在我想从Depts表中删除一名员工及其所有部门。我该怎么做 我试过了 Set setOfEmp = dept.getEmployees(); for(Object obj : setOfEmp){ Employee emp= (Employee)obj; emp.removeDept(dept); } deptManager.remove

我有两个表,一个是
Employee
,另一个是
Depts
。我使用第三个表
EMPLOYEE\u DEPT
实现了它们之间的双向多对多映射。现在我想从
Depts
表中删除一名员工及其所有部门。我该怎么做

我试过了

Set setOfEmp = dept.getEmployees();     
for(Object obj : setOfEmp){
    Employee emp= (Employee)obj;
    emp.removeDept(dept);
}
deptManager.removeDepartment(dept);
然后按如下方式删除该员工:

empManager.removeEmployee(emp);
这给了我错误

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

我尝试的第二种方法是首先从员工中删除部门,然后删除

emp.getDept().remove(dept);
dept.getEmployees().remove(emp);
empManager.removeEmployee(emp);
deptManager.removeDepartment(dept);
这给了我错误

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

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

empManager.removeEmployee(emp);
首先创建员工,然后保存部门

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);
它们在Hibernate中的映射如下所示:

<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>

您的问题似乎与事务管理有关。您能否在交易开始和结束之间包含整个代码?您的问题似乎与交易管理有关。你能把交易开始和结束之间的全部代码都写进去吗?