wxwx1985 () |
一对多的cascade的问题
两张表 一张Orders表 一张Orderitem表
我是这样设置的关系:
Orders.hbm.xml:
<set name="orderItems" table="orderitem"
lazy="false"
inverse="false"
cascade="all" >
<key column="order_id"/>
<one-to-many class="hibernate.Orderitem"/>
</set>
Orderitem.hbm.xml:
<many-to-one
name="orders"
class="hibernate.Orders"
cascade="all"
outer-join="false"
update="false"
insert="false"
column="order_id"
not-null="true"/>
当cascade设置为all时 保存和更新数据没问题
假设Orders表中有一行数据 Orderitem表中有与其相关联的两行数据 id分别为1和2
当只需要删除id为1的那行数据 其他数据不需要修改时
因为我cascade设置为all
所以会把Orders表中那一行数据也删除
如果我把cascade设置为save-update 就会报这样的错
deleted object would be re-saved by cascade (remove deleted object from associations): 2, of class: hibernate.Orderitem
如果我把cascade设置为delete 又会把2个表中所有的数据全部删除
并且保存和更新的时候不会级联保存或更新
我想达到的效果是当保存和更新的时候能够级联同步保存或更新
当只要删除Orderitem表中一行数据的时候 并不删除与他关联的Orders表中对应的数据
这里到底要如何设置啊?
或者如何编写删除的代码啊?
在删除的方法中加入这样几句代码就可以了
Orders od=(Orders)session.load(Orders.class,item.getOrderId());
od.getOrderItems().remove(item);
这样可以与要删除的数据解除关系