在做 Spring + hibernate 级联删除操作的时候,遇到了Exception :deleted object would be re-saved by cascade (remove deleted object from associations):于是浏览了大量的博客:
发现:与这个问题相关的问题域有
一、spring的配置文件中对hibernate的事务配置
<!-- 2、配置事务属性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="*" read-only="false"/> <!-- <tx:method name="get" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> --> </tx:attributes> </tx:advice>
注意方法的权限:
二、级联操作时遇到的表间的约束关系。
比如:
1、失败例子:
User user=new User(); user.setId(1); User user2=userDAO.queryUser(user); userDAO.deleteUser(user2); //这里直接删除了<many-to-one>中的many一方,是错误的。 System.out.println("删除---------"); return "success";
2、成功例子:
User user=new User(); user.setId(1); User user2=userDAO.queryUser(user); Role role=user2.getRole(); role.getUsers().remove(user2); //先移除两个对象之间的关系,在删除,成功。 userDAO.deleteUser(user2); System.out.println("删除---------"); return "success";
三、详细的例子可以参考其他博客:
1、 http://blog.163.com/weizonghua_2006/blog/static/13106065620108113618639/
2、 http://www.blogjava.net/crazycy/archive/2006/06/24/54939.html
