hibernate如何设置一对多cascade

(转)hibernate如何设置一对多cascade

关键字: (转)hibernate如何设置一对多cascade

一对多的cascade的问题
两张表 一张Orders表 一张Orderitem表
我是这样设置的关系:
Orders.hbm.xml:

        lazy="false"
        inverse="false"
        cascade="all" >
        <key column="order_id"></key>
        <one-to-many class="hibernate.Orderitem"></one-to-many>

Orderitem.hbm.xml:
<many-to-one></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);

这样可以与要删除的数据解除关系

posted @ 2009-02-21 22:34  yiling  阅读(1202)  评论(0编辑  收藏  举报