`
baobeituping
  • 浏览: 1068242 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Hiernate 预先抓取策略

阅读更多

预先抓取采用的是fetch="join"的方式

 

预先抓取指的是通过select语句使用outer join 一般是左外连接来获得对象的关联实例或者是关联的集合(集合被初始化了,这是重点)。

 

用上面的例子,加上一个身份证的对象。CARD 他和学生对象是一对一的关系。

 

身份-----立-----学-----立即------班

证-------即------生-----立即-----级

 

注释:max_fetch_depth是在hibernate.hbm.xml中设置。表示可以预先抓取的深度。

如果设置为1,表示只可以外连接一个表,如果这是为0,那么所有的预先抓取的策略将变成立即加载。

三者的对象都采取立即加载的方式。并且设置max_fetch_depth=0

打印:

Hibernate: select team0_.ID as ID0_0_, team0_.Name as Name0_0_ from test.team team0_ where team0_.ID=?


Hibernate: select students0_.teamID as teamID1_, students0_.ID as ID1_, students0_.ID as ID1_0_, students0_.Name as Name1_0_, students0_.TeamID as TeamID1_0_ from test.student students0_ where students0_.teamID=?


Hibernate: select card0_.ID as ID2_0_, card0_.StudentID as StudentID2_0_, card0_.Name as Name2_0_ from test.card card0_ where card0_.ID=?


Hibernate: select card0_.ID as ID2_0_, card0_.StudentID as StudentID2_0_, card0_.Name as Name2_0_ from test.card card0_ where card0_.ID=?

 

可以发现,对应于每个学生都会分别发出一条SQL语句去查询card的信息。

如果有100个学生那么就会发出100条SQL语句去查询card的信息。

这样很明显会降低系统的性能。

 

如果全部设置成预先抓取的话。

Hibernate: select team0_.ID as ID0_2_, team0_.Name as Name0_2_, students1_.teamID as teamID4_, students1_.ID as ID4_, students1_.ID as ID1_0_, students1_.Name as Name1_0_, students1_.TeamID as TeamID1_0_, card2_.ID as ID2_1_, card2_.StudentID as StudentID2_1_, card2_.Name as Name2_1_ from test.team team0_ left outer join test.student students1_ on team0_.ID=students1_.teamID left outer join test.card card2_ on students1_.ID=card2_.ID where team0_.ID=?

就只会发出一条SQL语句。

 

预先抓取和max_fetch_depth有很大的关系。

分享到:
评论

相关推荐

    hiernate5.2 .12 api

    以上只是Hibernate 5.2.12 API的部分关键概念,实际上,这个版本可能还包括其他高级特性,如批量操作、级联策略的优化、查询优化等。深入理解这些知识点,将有助于您在实际项目中更高效地利用Hibernate进行数据库...

    Flex整合Hiernate的BBS论坛系统

    Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS论坛系统 Flex整合Hiernate的BBS...

    hiernate+jar1.zip

    《Hibernate核心库与依赖解析》 Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者在处理数据库操作时的得力助手。它通过提供一套API,将复杂的SQL语句与Java对象相绑定,使得开发者可以专注于业务...

    hiernate 3.6.10 api

    hiernate 3.6.10 api chm

    Hiernate课件

    ### Hiernate课件知识点详述 #### 一、Hibernate简介 **1.1 什么是Hibernate?** Hibernate是一个开源框架,能够自动地根据XML完成对象关系映射(ORM),并将对象持久化到数据库中。它是连接Java应用程序和关系...

    spring2.5.6 +struts2.1.8+hiernate3.3.2(jar)

    标题中的"spring2.5.6 +struts2.1.8+hiernate3.3.2(jar)"指的是一个集成开发环境,它包含了三个关键的Java Web框架:Spring 2.5.6、Struts 2.1.8和Hibernate 3.3.2。这些框架在Java应用开发中扮演着重要的角色,尤其...

    struts+hiernate+Spring+ajax(四)整合

    Hibernate支持事务管理、缓存策略和一对多、多对一等多种关系映射,极大地提高了开发效率。 Spring框架则是一个全面的企业级应用开发框架,它的核心特性是依赖注入(DI)和面向切面编程(AOP)。DI允许我们通过容器...

    jsp_spring_dao_hiernate_spring登录_truthf1m_

    在本项目"jsp_spring_dao_hiernate_spring登录_truthf1m_"中,我们主要探讨了如何利用Spring框架实现一个登录功能。这个项目涵盖了Web开发中的几个关键组件,包括JSP(JavaServer Pages)、Spring框架的核心部分,...

    学生成绩管理系统struts2+spring+hiernate+dwr+jquery UI

    Spring的AOP(面向切面编程)特性允许我们定义全局的事务策略,确保数据的一致性。同时,Spring的IoC容器管理Bean,使得组件配置更加简洁。 Hibernate作为持久层框架,简化了数据库操作,它通过ORM(对象关系映射)...

    xfire集成spring+hiernate实现webservice样例工程

    【xfire集成spring+hibernate实现webservice样例工程】是一个典型的Java开发中的整合案例,它演示了如何将三个重要的技术框架——XFire、Spring和Hibernate有效地结合在一起,以构建一个提供Web服务的工程。...

    Hiernate里get和load的区别

    - `load` 方法则默认使用延迟加载策略,只有在访问对象属性或者强制初始化时才会触发实际的数据库查询。 在上述测试类的例子中,我们看到当尝试通过`get`方法获取ID为7的Book对象时,由于数据库中不存在该记录,`...

    hibernate各种常用方法的详解

    ### Hibernate 常用方法详解 #### 一、前言 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互过程。本文将详细介绍 Hibernate 中常用的几种方法,包括 `save`, `update`...

    Strtus2+spring+hibernate

    Struts2、Spring和Hibernate是Java Web开发中的三个核心框架,它们共同构成了经典的“SSH”架构,用于构建高效、可维护的大型企业级应用。这个架构整合了MVC(Model-View-Controller)设计模式、依赖注入(DI)与...

    jsf 1.2_04+hibernate 3.2.2.ga+spring 2.0.5

    在本项目中,我们使用了JSF 1.2_04、Hibernate 3.2.2.ga和Spring 2.0.5这三个技术栈来构建一个基于Java的Web应用程序。这种组合通常被称为JEE(Java Enterprise Edition)的轻量级版本,允许开发者在不依赖完整的EJB...

    用户管理_SSH(Strtus2+hibernate+spring)

    利用Strtus2+hibernate+spring实现的用户管理小项目(内含mysql数据库脚本和所需的所有jar包),另外里面自己也做了一些封装,这个项目的说明可以参考我发表的博客"对SSH的一些认知

    spring4_struts2_hibernate4整合的整理文件

    本文档是在整合struts2,spring4,hiernate4后所做的笔记以及怎么整合技巧

    案例课程B-S架构-1期 详细设计书19-收文管理模块.pdf

    【收文管理模块详细设计】 收文管理模块是企业信息化办公自动...此外,为了提高性能,可能需要对数据查询进行优化,比如使用索引和缓存策略。整体设计应充分考虑模块间的解耦合,以适应未来可能的业务变化和系统扩展。

    案例课程B-S架构-1期 详细设计书18-审核批示模块.pdf

    - **Model层**:实体对象类(如`Shenhe`)和映射配置文件(如`Shenhe.hbm.xml`)位于`com.hiernate.persistence`包中。公共操作类(如数据库操作和业务功能方法)位于`com.hiernate.util`包下,包括`GetHibernate`...

Global site tag (gtag.js) - Google Analytics