`
dabing013
  • 浏览: 40740 次
  • 性别: 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是一种流行的Java持久层框架,它提供了强大的对象关系映射(ORM)功能,能够将Java对象与关系数据库中表之间建立映射关系。Hibernate的关联映射是其核心功能之一,可以将...

    Hibernate映射

    hibernate 映射关系 小结

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...

    hibernate关系映射

    在 Hibernate 中,关系映射是指如何将 Java 对象模型映射到数据库表及其字段上,这种映射机制是 Hibernate 的核心之一。 #### 二、关系类型 在 Hibernate 中,常见的关系类型包括: 1. **一对一(One-to-One)** ...

    hibernate 学习笔记小结

    **Hibernate**支持多种关联关系映射,包括一对一、一对多、多对多等。 1. **一对一(One-to-One)**: - 可以通过`&lt;one-to-one&gt;`标签实现,通常用于表示两个实体之间的一对一关系。 2. **一对多(One-to-Many)**...

    MAPPING Hibernate方法小结.doc

    【MAPPING Hibernate方法小结】 Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式操作数据库。以下是对Hibernate中几种关键概念的详细解释: 1. **对象之间的关系**: - **...

    hibernate小结

    在本篇文章中,我们将对Hibernate框架进行一个较为全面的小结。主要内容包括:Hibernate映射中的Lazy加载策略、Hibernate查询语言(HQL)的使用方法,以及一些基本配置与操作技巧。通过本文的学习,你将能够更加熟练...

    Hibernate的框架的总结

    Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用提供了一种高效、灵活的方式来处理数据库交互。通过Hibernate,开发者可以使用面向对象的方式操作数据库,而无需编写复杂的SQL语句。本文将深入探讨...

    Hibernate 框架总结

    Hibernate是一个开源的Java框架,它为对象关系映射(Object Relational Mapping, ORM)提供了一种实现方式,允许Java程序员以面向对象的方式操作数据库。从Hibernate的核心概念、工作原理到其实现细节,Hibernate...

    精通 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 映射一对多双向自身关联...

    关于Clob类型在Hibernate中 的应用小结

    4.1.3 **Hibernate映射文件**: 在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml &lt;property name="summaryClob" type="org.hibernate.type.ClobType"&gt; ``` **CRUD操作**: ...

    Hibernate操作Oarcle中Clob、Blob字段小结

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

    hibernate一些文档资料

    - **Hibernate的作用**:Hibernate作为一种ORM(对象关系映射)框架,它的核心价值在于简化了Java对象与关系型数据库之间的交互,实现了对象和数据库表之间的自动映射。 #### 二、应用程序的分层体系结构及其在...

    Struts2+Hibernate+Spring项目小结――Hibernate部分

    这里我们主要讨论SSH项目中的Hibernate部分,它是一个强大的对象关系映射(ORM)框架,使得开发者可以方便地将数据库操作与Java对象模型进行绑定。 1. 实体Bean的配置 在Spring中,配置Hibernate的SessionFactory...

    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 带...

    hibernate3入门

    **Hibernate**是一种对象关系映射(Object/Relational Mapping,简称ORM)解决方案,它提供了一种机制,用于将Java对象及其关系映射到关系型数据库中的表及其关系。通过这种方式,开发人员能够更高效地处理数据,...

    精通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 父子...

Global site tag (gtag.js) - Google Analytics