在以前使用hibernate时,经常对保存存在关联关系的对象时,不确定是否能保存成功。
    因此,特意对一对多关系的2个对象进行实践。

一、pojo类和配置文件的准备

        这里有一点提前说一下,外键列在数据库中并没有设置为不为null。因此可以出现外键为空的情况。
(1)pojo类
           
 (2)映射文件
            
(3)测试类中方法的准备
        
 

二、双方都维护关联关系且双向关联

        注意:这里的双向关联是指双向都建立关系
    (1)1方和多方都保存,且建立了双向关联的关系。这样是肯定可以保存成功的。
            

(2)1方或多方中,有一方没有保存。那么会保存失败,因为保存时分类是瞬时态对象,所以失败。

 

(3)在(2)的代码的基础上,给product的映射文件中配置一个级联保存。这样在保存产品时就会级联保存分类,这样分类就不是瞬时态对象了,保存成功

            
             


三、双向维护外键,但只建立单向关联关系

 (1)产品中没有分类,由于外键可以为null;因此可以保存成功


(2)产品中没有分类,分类中有产品。产品和分类都执行保存,保存成功
               
          
(3)产品中没有分类,分类中有产品,只保存分类。这里肯定保存失败,因为分类也会维护外键。
          当分类维护外键时,发现集合里面的产品是瞬时态对象。所以肯定保存失败了
        

四、外键只靠多方维护

    先把一方维护外键的功能取消,只需要在分类的映射文件中,配置inverse为true
      
(1)产品中有分类,只保存产品。这样由于保存产品时,会去维护外键,而用来维护外键的分类对象为瞬时态对象,所以一定保存失败

 
(2)针对(1)我们在保存产品后面添加保存分类。这样保存产品时,用于维护外键用的对象就是持久态对象了。这样就保存成功了。
       
(3)产品中有分类,分类中有产品,只保存分类。保存成功。因为分类不会维护外键,所以不管集合里面装什么状态的对象都不影响。
 

(4)产品中有分类,只保存分类。一定保存成功,因为分类不维护外键,且用于维护外键的对象也没有。道理同(3)。


五、总结

       看了这么多实例,发现保存失败的原因都是一样的。就是拿来去更新外键的对象(这个描述可能有点绕口)不能是瞬时态。
       比如,产品这一方维护外键的话,那么他的用来更新外键的对象就是他里面的那个分类。如果这个分类是瞬时态对象,肯定保存失败。
  
 

 

 

 
 
 
 


 
 

 

 

Hibernate一对多关联关系保存时的探究的更多相关文章

  1. hibernate 一对多关联关系(具体分析)

    在领域模型中, 类与类之间最普遍的关系就是关联关系. 在 UML 中, 关联是有方向的.  以 Customer 和 Order 为例: 一个用户能发出多个订单, 而一个订单仅仅能属于一个客户. 从 ...

  2. hibernate 一对多 级联 保存修改 删除

    一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...

  3. hibernate一对多关联关系

    想了几天,终于知道sql语句的发出问题.查了很多书,感觉都没有说清楚,有的还是错的.请看下面: <?xml version="1.0"?> <!DOCTYPE h ...

  4. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  5. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

  6. [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. (转)Hibernate框架基础——一对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即 ...

  8. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  9. WebService调用一对多关联关系时出现 死循环:A cycle is detected in...

    通过WebService调用一对多关联关系时引起的问题:A cycle is detected in the object graph 具体异常信息: org.apache.cxf.intercept ...

随机推荐

  1. Selenium win7+selenium2.0+python+JetBrains PyCharm环境搭建

    win7+selenium2.0+python+JetBrains PyCharm环境搭建 by:授客 QQ:1033553122 步骤1:下载python 担心最新版的支持不太好,这里我下载的是py ...

  2. Oracle 参数文件及相关操作介绍

    Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...

  3. SQLServer 学习笔记之超详细基础SQL语句 Part 4

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...

  4. 使用thumbnailator不按照比例,改变图片的大小

    我们在平时的开发中,偶尔也会遇到图片处理的问题,比如图片的压缩,按比例改变图片的大小,不按比例改变图片的大小等等. 如果要自己去开发这样一套工具,我觉得大多数人都是做不到的,所以还是学会站在巨人的肩膀 ...

  5. go语言练习:数组

    1.创建数组: package main import "fmt" func main() { var lst = [3]int{1, 2, 3} //var name=[数量]类 ...

  6. 负载均衡(Load Balancing)学习笔记(三)

    本文讲述实现负载均衡的常用算法. 轮询法(Round Robin) 轮询法是负载均衡中最常用的算法,它容易理解也容易实现.轮询法是指负载均衡服务器(load balancer)将客户端请求按顺序轮流分 ...

  7. Java为什么不支持多继承

    类定义属性和方法 描述某一类事物的抽象 而接口定义的是行为 并不限于任何具体意向 按照逻辑上来说 单继承更明确 一个子类就应该是其父类代表的事物中的某个更具体的类别 不应该即是这种东西又是那种东西 而 ...

  8. Spring Cloud 子项目介绍

    Spring Cloud由以下子项目组成. Spring Cloud Config 配置中心——利用git来集中管理程序的配置. 项目地址:https://spring.io/projects/spr ...

  9. PHP支付宝支付开发流程

    支付宝开发流程   1.首先我们先谈谈第三方支付 所谓第三方支付就是和一些各大银行签约,并具备一定实力和信誉保障的第三方独立机构提供的交易平台 目前市面上常见的有支付宝,财付通,网银,易宝支付等,网站 ...

  10. 浏览器加载和渲染html的顺序-css渲染效率的探究(转载)

    1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...