`
dabing013
  • 浏览: 40127 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate之一对多映射关系小结

阅读更多

可以通过两个类来描述Hibernate一对多关系映射

 

User和Account是一对多的关系,因此有以下属性:    

** User: Set accts -> Account   对象集合 

** Account: User user 

 

 User.hbm.xml中,关联属性accts配置如下:

<set name="accts" cascade="all" inverse="true">
        <key column="fid"/>
     <one-to-many class="Account"/>
</set>

**<set name="accts">表示属性accts是一个集合

**cascade="all"表示级联操作的级别

**inverse="true"表示由关系的另外一端(多端)来维护关系,以提高效率

                           表示本身不维护表之间的关系!而由想反的一方来维护

**<key column="fid"/>表示关系另一端(多端)的关联表中和本表相关的外键字段的名字是fid

**<one-to-many class="Account">表示该集合中保存的持久对象类型是Account

 

Account.hbm.xml中,关联属性User配置如下:

<mang-to-one name="user" column="fid" cascade="save-update"/>

**fid为体现一对多关系的外键字段的名字

 

以下是一对多中一端set标签的设置

**inverse="true"就是在设置如果在内存中的修改或添加了这个集合中的某一个或某几个对象他不会将全部集合的信息同 步到数据库,而是只将集合中被修改的对象重新同步到数据库。

 

**cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,

cascade="none",cascade="save-update",cascade="delete",cascade="all" cascade="persist"

cascade="delete-orphan",cascade属性的值常用的设置为以上五项:

 

**none就是不使用级联操作,默认级联是none。

 

**save-update也就是只有对象保存操作(持久化操作)或者是持久化对象的更新操作,才会级联操作关联对象(子对象)。

 

**persist就只是将级联对象也持久化到数据库。

 

**delete对持久化对象的删除操作时会进行级联操作关联对象(子对象)。

 

**all对持久化对象的所有操作都会级联操作关联对象(子对象)。

 

**all-delete-orphan,在多端进行删除操作时,会再多端表中留下null空纪录,设置了级联操作为delete之会将表中表示关联的外键id置成null,不会将这条纪录也删除掉,而把级联设置成delete-orphan就不会留有空纪录,而是级联的把相关纪录删除掉。

 

**batch-size这个属性只能够写在set标签中,这个属性代表批量加载,也就是在加载一端的集合属性时会一次加载指定的数量的对象,而不是默认的一个一个的加载,会提高效率,批量加载只能用于延迟加载和立即加载策略,也就是(lazy="true"或者lazy="false")。

 

**lazy="true" 延迟加载,所谓的延迟加载,就是对一端的集合属性的加载策略,就是在不使用到集合中的对象的数据就不会真正的加载集合中的对象数据,而是加载一个代理对象就相当于的一个空的容器。这也就是会出现**LazyInitializationException异常,也就是没有初始化这个代理的集合对象,在事先查询到了集合中的对象就会初始化这个对象,如果Session没有关闭就会在查询加载集合中的对象信息,如果提前关闭了Session,当使用集合中的对象信息时就会有这个异常。

 

**fetch="join",这就是使用了预先抓取策略,也就是针对关联的对象的加载策略,在使用到关联对象的信息时会再发送sql语句,如果不使用fetch="join",就会不使用表连接而是先查出一端的关联id再一条一条的发送sql语句查询到关联对象信息,使用了fetch="join"就会使用表连接将关联对象信息直接查寻出来的。fetch="lazy"这个是默认的设置。

 

注意:

在使用fetch="join"要区分开他和外连接的区别,他不会忽略配置文件中的加载策略,而使用了外连接就会忽略配置文件中使用了外连接的一端的所有加载策略,而替之为立即加载。

3
1
分享到:
评论

相关推荐

    hibernate一对多关联映射学习小结

    主要介绍了hibernate一对多关联映射学习小结,需要的朋友可以参考下

    Hibernate映射

    hibernate 映射关系 小结

    hibernate 3中的缓存小结

    hibernate 3中的缓存小结 2.2. 一级缓存的管理: 当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联...

    Hibernate实战(第2版 中文高清版)

     7.3.1 多态的多对一关联   7.3.2 多态集合   7.3.3 对联合的多态关联   7.3.4 每个具体类一张多态表   7.4 小结   第8章 遗留数据库和定制SQL   8.1 整合遗留数据库   8.1.1 处理主键   8.1.2 带...

    Hibernate 框架总结

    对 Hibernate 框架的学习总结 映射配置已详细描述,如还是不懂得可以留言,私发你代码,如有错误,欢迎各位大神指点

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

    7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...

    hibernate小结

    hibernate映射lazy策略hibernate查询语言hql

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     7.1 建立多对一的单向关联关系  7.1.1 元素的not-null属性  7.1.2 级联保存和更新  7.2 映射一对多双向关联关系  7.2.1 元素的inverse属性  7.2.2 级联删除  7.2.3 父子关系  7.3 映射一对多双向自身关联...

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

    7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...

    第1章准备源代码阅读环境与Hibernate的基本配置

    此书是一本探索Hibernate技术内幕的图书,所以探索之前,我们应该拥有一份Hibernate的源代码,并对源代码有一个大概的了解。这样,我们就可以很方便的结合着Hibernate源代码阅读以后的章节。本章除了讲解如何搭建源...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    精通Java Web整合开发(第2版)

    第12章 基于annotation注解技术的ssh 2整合开发 12.1 初识annotation522 12.2 亲身体验annotation的威力524 12.3 struts 2.x的annotation插件convention-plugin528 12.4 hibernate 3.x的annotation解决...12.6 小结563

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 ...15.13 小结

    Java数据库技术详解 DOC简版

    第10章 Hibernate映射之实体映射 第11章 Hibernate的关联映射 第12章 HQL查询语言 第13章 Hibernate的高级特性 第14章 Hibernate结合JSP使用 第四篇 iBatis篇 第15章 iBatis概述 第16章 iBatis的特性 ...

    低清版 大型门户网站是这样炼成的.pdf

    4.3.5 映射多对一单向关联关系 235 4.3.6 映射一对多双向关联关系 239 4.3.7 映射一对多双向自身关联关系 244 4.3.8 映射多对多单向关联关系 247 4.3.9 映射多对多双向关联关系 252 4.3.10 映射组成关系 256 ...

Global site tag (gtag.js) - Google Analytics