日期:2014-05-20  浏览次数:20689 次

SSH集成删除对象级联错误
我在SSH集成项目中做订单管理那块的时候,想实现删除订单的时候级联删除下面的订单项,但是我方法都试完了总要报deleted object would be re-saved by cascade (remove deleted object from association
这个错误,我的配置文件级联设置也设置成了cascade=all了的,这到底是为什么呢,我记得当时学习hibernate的时候能实现啊,为什么现在就不能实现了,就一个简单的删除,我也试过把order和orderitem的关系解除,再删除order,那样效果是order确实删除了,但是order对应的orderitem没有删除,只是把orderitem的外键orderid设置成了空,这几天就为了这个以为简单的东西头都搞大了,在网上也搜了很多,还是没能解决我的问题,什么设置lazy=true,什么把缓存session清空,都试了的,就是不行,我就纳闷了,这是为什么,难道只有解除关系,删除了order后在依次把它下面的orderitem遍历删除?这不太麻烦了,如果真是只有这样那么设置cascade=all意义又何在呢,求高手解答!!!贴下片段配置和action代码。
order的映射文件片段:
<set lazy="true" name="orderItems" cascade="all" inverse="true">
<key column="order_id"></key>
<one-to-many class="OrderItem"/>
</set>
orderitem的映射文件片段:
<many-to-one name="order" column="order_id" class="Order" cascade="all" ></many-to-one>
action执行的方法:
public String delete(){
Order order=orderBiz.findOrderById(id);
type=order.getOrderType();
User user=order.getUser();
user.removeOrder(order);//解除与user的关系
//order.removeAll();
orderBiz.remove(order);
display();
return "ok";
}
再次恳请高手给予小弟解答,咱们共同探讨共同学习!

------解决方案--------------------
一端:
将多端的传播持久性(级联)设置为最全面的全部级联:cascade="all-delete-orphan"
将维护关系的控制权交给多端:inverse="true"

多端:
多端对一端采取了预先抓取策略:fetch="join"
将一端的传播持久性(级联)设置为存储、更新:cascade="save-update"
------解决方案--------------------
inverse这个属性设置对吗 orderitem这个表是不是还关联其它的表?