`

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

阅读更多

    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);

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


分享到:
评论

相关推荐

    hibernate 级联(cascade和inverse)一对多

    hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。

    hibernate many-to-one(多对一)及 cascade(级联).doc

    深入理解hibernate many-to-one(多对一)及 cascade(级联).

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    hibernate总结

    Hibernate映射多对多(两个一对多实现多对多) 表:材料表和产品表多对多,在数据库中有中间表即产品材料表用来存放两个表之间的关系 Java类:材料PO,产品PO,中间PO,中间PO的复合主键类(由于是两个一对多形成的多对...

    Hibernate注解

    * @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...

    hibernate关系映射配置.rar

    多对一: &lt;hibernate-mapping&gt; &lt;class name="com.bjsxt.hibernate.User" table="t_user"&gt; &lt;!...一对多单向: &lt;hibernate-mapping package="com.bjsxt.hibernate"&gt; &lt;id name="id"&gt;

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章介绍一对多关联关系的映射方法,重点介绍inverse属性和cascade属性的用法。本章还将介绍通过Hibernate API来保存、修改和删除具有关联关系的对象的方法。 7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-...

    Hibernate_Annotation关联映射

    对于一对多的双向映射,如果要一对多这一端维护关联关系,你需要删除mappedBy元素并将多对一这端的@JoinColoumn的insertable和updatabel设置为false。这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE...

    Hibernate开发租房系统2 源码

    使用cascade和inverse优化区和街道关联关系 实现区和街道双向一对多关联关系

    hibernate常用关联映射源码(很实用)

    该资源包括了hibernate开发中的常见关联映射的源代码,其中包括:one2one,one2many,many2many等,还有继承映射,inverse,fetch,cascade关键字的应用等,对初学者来说,是很实用的,难度适中,很好理解

    精通Hibernate:对象持久化技术第二版part3

    本章介绍一对多关联关系的映射方法,重点介绍inverse属性和cascade属性的用法。本章还将介绍通过Hibernate API来保存、修改和删除具有关联关系的对象的方法。 7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-...

    Hibernate开发指南

    单向一对多关系......................................................39 ÿ 双向一对多关系......................................................44 多对多关联........................................

    精通Hibernate之映射继承关系(六)

    图14-11ClassD与ClassA为多对一多态关联关系ClassA、ClassB和ClassC构成了一棵继承关系树,如果继承关系树的根类对应一个表,或者每个类对应一个表,那么可以按以下方式映射ClassD的a属性:&lt;many-to-onename="a...

    jdbc基础和参考

    一般在做双向多对一(一对多)关联关系映射的时候,一般会设置让一的一方放弃对关联关系的维护,以减少不必要的更新语句 一对一: 基于外键的一对一 Wife Husband id id name name h_id references Husband...

    千方百计笔试题大全

    (如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101、如何优化Hibernate? 23 102、Struts工作机制?为什么要使用Struts? 23 103、Struts的validate框架是如何验证的...

    java面试宝典

    (如:一对多、多对多的关系) 22 99、说下Hibernate的缓存机制 22 100、Hibernate的查询方式 23 101、如何优化Hibernate? 23 102、Struts工作机制?为什么要使用Struts? 23 103、Struts的validate框架是如何验证的...

Global site tag (gtag.js) - Google Analytics