我有两个表,一个是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