`
jzinfo
  • 浏览: 116509 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate3中 一对多 和多对一的检索策略

阅读更多

在一对多的情况下。ClassStudent one-to-many 映射关系

class班级对象中,存在如下映射

        <set 
            name="students" 
            cascade="all-delete-orphan"
            inverse="true"
            lazy=”true”
            outer-join="true"
          >
            <key column="classid" />
            <one-to-many class="cn.tutorinfo.domain.Student" />
        </set>

  

 

无论 lazy设置为true还是 false 只要设置了outer-join true ,将采用左外连接检索策略检索class关联的 student对象,发送如下SQL语句:

     

select

        classinfo0_.id as id0_1_,

        classinfo0_.class_name as class2_0_1_,

        classinfo0_.info as info0_1_,

        students1_.classid as classid3_,

        students1_.id as id3_,

        students1_.id as id1_0_,

        students1_.name as name1_0_,

        students1_.age as age1_0_,

        students1_.classid as classid1_0_ 

    from

        testdb.class_info classinfo0_ 

    left outer join

        testdb.student students1_ 

            on classinfo0_.id=students1_.classid 

    where

        classinfo0_.id=?

 

如果outer-join 不设置 (默认就是不设置),只设置lazy属性,则按照lazy属性的设置进行,lazy默认是false延迟加载,如果设置为true 则立即检索全部相关的student对象

Lazy属性

Outer-join属性

检索策略

True (默认)

False

延迟检索

False

False

立即检索

True

True

迫切左外连接

False

Ture

迫切左外连接

 

Hibernate3 <set >一对多映射中 默认lazy=true ,   outer-join=false. 默认采用延迟检索机制

在多对一映射关系中,比如student对象中有如下的映射:

 

<many-to-one name="classInfo"

           class="cn.tutorinfo.domain.ClassInfo" 

           cascade="save-update"

           >

           <column name="classid" />

</many-to-one>

 

 

 

一个student只属于一个班级,一个班级有多个student.

hibernate3中,针对关联对象,默认的检索机制就是延迟检索.

Many-to-one 映射中,同样可以设置outer-join属性,对于关联的class对象,采用如下检索方式

Student.hbm.xml<many-to-one>元素的outer-join属性

ClassInfo.hbm.xml<class>类级别的lazy属性

检索Student对象时对关联的classInfo对象使用的策略

Auto (默认值)

True (默认)

延迟检索

Auto (默认值)

False

迫切左外连接

True

True

迫切左外连接

True

False

迫切左外连接

False

True(默认)

延迟检索

False

False

立即检索

 

总结:

对于多对以或者一对一 这样的关联,应该优先考虑使用外连接检索策略即将outer-join设置为true。一般我们在获取对象时候,在大多数的业务逻辑情况下,同时也会获取关联的数据(外键所表示的值没有实际意义,比如实际中,获取学生信息时,我们希望立即获取他的班级信息,但当前只获取了学生所在的班级编号,但并不知道班级名,所以我们可以使用做外连接同时获取,这样比立即检索少用了sql语句)。

当然,如果仅仅是获取学生的用户信息,不需要立即获取所在的班级信息,可以考虑使用延迟加载的策略。即默认的策略就是如此。

 

另外,hql中指定的检索策略,会忽略配置文件中相关的检索策略

 

分享到:
评论

相关推荐

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

     16.3 一对多和多对多关联的检索策略  16.3.1 立即检索(lazy属性为“false”)  16.3.2 延迟检索(lazy属性为默认值“true”)  16.3.3 增强延迟检索(lazy属性为“extra”)  16.3.4 批量延迟检索和批量立即...

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

     16.3 一对多和多对多关联的检索策略  16.3.1 立即检索(lazy属性为“false”)  16.3.2 延迟检索(lazy属性为默认值“true”)  16.3.3 增强延迟检索(lazy属性为“extra”)  16.3.4 批量延迟检索和批量立即...

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

     16.3 一对多和多对多关联的检索策略  16.3.1 立即检索(lazy属性为“false”)  16.3.2 延迟检索(lazy属性为默认值“true”)  16.3.3 增强延迟检索(lazy属性为“extra”)  16.3.4 批量延迟检索和批量立即...

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

     16.3 一对多和多对多关联的检索策略  16.3.1 立即检索(lazy属性为“false”)  16.3.2 延迟检索(lazy属性为默认值“true”)  16.3.3 增强延迟检索(lazy属性为“extra”)  16.3.4 批量延迟检索和批量立即...

    Hibernate注解

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

    hibernate总结

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

    hibernate入门与概述

    hibernate入门与概述。介绍对象-关系 映射基础,映射对象标识符,映射一对多关联关系,操纵持久化对象,hibernate的检索策略。

    Hibernate的ppt

    hibernate入门;java对象持久化;对象-关系映射基础;...映射一对多关联关系;映射一对一关联关系;映射多对多关联关系;操纵持久化对象;映射组成关系;hibernate映射类型;hibernate的检索策略等等。

    Hibernate学习总结

    学习成长路,Hibernate总结: 1.Hibernate入门优缺点、 ...5.映射一对多关联关系、 6.深入session、 7.懒加载、 8.Hibernate检索策略(fetch抓取策略)、 9.二级缓存、 10.Hbernate的检索方式(HQL语句)

    jdbc基础和参考

    单向的一对多的关系,在进行关联关系的操作时,会执行不必要的update语句,所以,一般情况下,我们不会做单向一对多的映射。 inverse="true":让其中一方放弃对关联关系的维护 一般在做双向多对一(一对多)关联关系...

    Spring面试题

    1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表...

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

    5.2 hibernate的检索策略 291 5.2.1 立即检索 291 5.2.2 延迟检索 296 5.2.3 迫切左外连接检索 300 5.3 hql查询方式 303 5.3.1 基本查询 303 5.3.2 条件查询 305 5.3.3 分页查询 307 5.3.4 连接查询 308 ...

    Java Web程序设计教程

    9.3.2一对多、多对一关联关系的使用 197 9.3.3多对多关联关系的使用 199 9.4hibernate过滤 201 9.4.1session过滤 201 9.4.2filter过滤 201 9.5项目实战——客户订单管理 202 本章小结 207 课后练习 207 第10...

    java_jsp项目源码_企业级新闻系统(SSH+MYSQL)130221.rar

    企业级新闻系统(SSH+MYSQL)是一款基于Java技术栈(Struts2、Spring、Hibernate)和MySQL数据库开发的新闻管理系统。本系统旨在为企业提供一个高效、灵活且易于扩展的新闻发布、管理与展示平台。通过该系统,企业可以...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

    iBATIS实战

    书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...

Global site tag (gtag.js) - Google Analytics