部门是一方
首现创建并同步了:
部门1
部门2部门配置文件:
<hibernate-mapping>
<class name="com.dto.Department" table="DEPARTMENTS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="deptname" type="java.lang.String">
<column name="DEPTNAME" length="150" />
</property>
<set name="employes" cascade="save-update" inverse="true">
<key column="DEPARTMENT_ID" not-null="false"/>
<one-to-many class="com.dto.Employee"/>
</set>
</class>
</hibernate-mapping>
员工是多方
之后创建并同步了:
员工a --> 部门1
员工b --> 部门1
员工c --> 部门2员工配置文件:
....
<many-to-one name="department" class="com.dto.Department">
<column name="DEPARTMENT_ID" not-null="false"/>
</many-to-one>
....在这个时刻,我执行删除“部门1”,解散部门1(我并不像级联删除部门1下的所有员工)。执行报错:org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:624)
org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:738)
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:614)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy1.delDepartment(Unknown Source)
com.actions.DepartmentAction.delDept(DepartmentAction.java:55)
首现创建并同步了:
部门1
部门2部门配置文件:
<hibernate-mapping>
<class name="com.dto.Department" table="DEPARTMENTS">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property name="deptname" type="java.lang.String">
<column name="DEPTNAME" length="150" />
</property>
<set name="employes" cascade="save-update" inverse="true">
<key column="DEPARTMENT_ID" not-null="false"/>
<one-to-many class="com.dto.Employee"/>
</set>
</class>
</hibernate-mapping>
员工是多方
之后创建并同步了:
员工a --> 部门1
员工b --> 部门1
员工c --> 部门2员工配置文件:
....
<many-to-one name="department" class="com.dto.Department">
<column name="DEPARTMENT_ID" not-null="false"/>
</many-to-one>
....在这个时刻,我执行删除“部门1”,解散部门1(我并不像级联删除部门1下的所有员工)。执行报错:org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:624)
org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:738)
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:614)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:709)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy1.delDepartment(Unknown Source)
com.actions.DepartmentAction.delDept(DepartmentAction.java:55)
this.getHibernateTemplate().getSessionFactory().openSession().lock(parentDocumentCatalog, LockMode.NONE);