`
sameseam
  • 浏览: 23176 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Hibernate延迟加载之属性延迟加载

 
阅读更多

在Hibernate3中,引入了一种新的特性——属性的延迟加载,这个机制又为获取高性能查询提供了有力的工具。在前面我们讲大数据对象读取时,在User对象中有一个resume字段,该字段是一个java.sql.Clob类型,包含了用户的简历信息,当我们加载该对象时,我们不得不每一次都要加载这个字段,而不论我们是否真的需要它,而且这种大数据对象的读取本身会带来很大的性能开销。在Hibernate2中,我们只有通过我们前面讲过的面性能的粒度细分,来分解User类,来解决这个问题(请参照那一节的论述),但是在Hibernate3中,我们可以通过属性延迟加载机制,来使我们获得只有当我们真正需要操作这个字段时,才去读取这个字段数据的能力,为此我们必须如下配置我们的实体类:
  <hibernate-mapping>
    <class name="com.neusoft.entity.User" table="user">
      ……
      <property name="resume" type="java.sql.Clob" column="resume" lazy="true"/>
    </class>
  </hibernate-mapping>
通过对<property>元素的lazy属性设置true来开启属性的延迟加载,在Hibernate3中为了实现属性的延迟加载,使用了类增强器来对实体类的Class文件进行强化处理,通过增强器的增强,将CGLIB的回调机制逻辑,加入实体类,这里我们可以看出属性的延迟加载,还是通过CGLIB来实现的。CGLIB是Apache的一个开源工程,这个类库可以操纵java类的字节码,根据字节码来动态构造符合要求的类对象。根据上面的配置我们运行下面的代码:
  String sql="from User user where user.name=’zx’ ";
  Query query=session.createQuery(sql); (1)
  List list=query.list();
  for(int i=0;i<list.size();i++){
    User user=(User)list.get(i);
    System.out.println(user.getName());
    System.out.println(user.getResume()); (2)
  }
当执行到(1)处时,会生成类似如下的SQL语句:
  Select id,age,name from user where name=’zx’;
这时Hibernate会检索User实体中所有非延迟加载属性对应的字段数据,当执行到(2)处时,会生成类似如下的SQL语句:
  Select resume from user where id=’1’;
这时会发起对resume字段数据真正的读取操作。

分享到:
评论

相关推荐

    Hibernate延迟加载以及利用Spring

    ### Hibernate延迟加载以及利用Spring #### 一、Hibernate延迟加载概念与原理 在理解Hibernate的延迟加载机制之前,我们首先需要了解什么是延迟加载。延迟加载(Lazy Loading)是一种设计模式,其核心思想是在真正...

    hibernate 延迟加载深入剖析

    ### Hibernate延迟加载深入剖析 #### 一、概述 在现代软件开发中,特别是与数据库交互的应用场景下,Hibernate作为一款流行的Java持久层框架,提供了多种高效处理数据的技术。其中,延迟加载(Lazy Loading)是一...

    Hibernate 延迟加载剖析与代理模式应用

    《Hibernate延迟加载与代理模式解析》 在Java的持久化框架Hibernate中,延迟加载(Lazy Load)是一项重要的优化策略,其核心目标是提高系统性能,减少内存占用,避免不必要的数据库交互。延迟加载允许我们在需要...

    hibernate延迟加载解决

    ### Hibernate延迟加载详解 #### 一、什么是延迟加载? 延迟加载是一种优化技术,在软件开发中广泛应用于各种场景,尤其在数据库交互中尤为重要。其核心思想是仅在确实需要某个资源时才加载它,而非一开始就加载...

    什么是hibernate延迟加载

    详细介绍hibernate延迟加载,对hibernate初学者有一定的帮助

    Hibernate集合属性的延迟加载.doc

    在给定的文档中,我们看到一个例子,展示了如何在 Hibernate 中配置一个具有集合属性的实体类 `Person`,以及如何通过映射文件启用延迟加载。`Person` 类拥有一个 `Set&lt;Address&gt;` 类型的 `addresses` 属性,表示个人...

    【北大青鸟内部教程】jsp中关于Hibernate延时加载的问题

    在处理大数据量或者复杂数据结构时,Hibernate引入了延时加载(Lazy Loading)机制,以提高应用程序的性能。本文将深入探讨在JSP(JavaServer Pages)环境中,如何理解和应对Hibernate的延时加载问题。 首先,我们...

    Hibernate延时加载与lazy机制.doc

    Hibernate的延迟加载(Lazy Loading)和懒加载机制(Lazy Initialization)是优化ORM框架性能的重要策略。这个机制的主要目的是提高程序的效率,减少不必要的数据库交互,只在真正需要数据时才去加载它们。以下是对...

    hibernate属性延时加载如何操作、相应的jar包

    hibernate3的属性延时加载是个很有意义的东西,它能让你把你不想加载到内存里的东西在查询的时候排除。 我相信来下载这个东西的人都已经很了解这一块的知识了,只是配不对那个类增强器才来下载我这个文件。 这些...

    hibernate 延迟加载.docx

    【hibernate 延迟加载】 在Java的持久化框架Hibernate中,延迟加载(Lazy Loading)是一种优化数据库访问性能的技术。它允许我们在需要时才加载关联的对象,而不是在初始查询时就一次性加载所有数据。这有助于减少...

    Hibernate延迟加载机制.zip

    Hibernate延迟加载机制.zip

    Hibernate延迟加载介绍.doc

    《Hibernate延迟加载详解》 Hibernate作为Java领域中的一个强大的对象关系映射框架,提供了许多优化数据库操作的策略,其中之一便是延迟加载(Lazy Loading)。延迟加载机制旨在减少不必要的性能消耗,只在真正需要...

    Hibernate延迟加载

    Hibernate延迟加载是ORM框架Hibernate中的一个重要特性,它旨在提高应用程序的性能和效率。延迟加载(Lazy Loading)策略允许我们仅在需要访问一个对象或其属性时才从数据库加载它们,而不是在初始加载实体时就一次...

    Hibernate 延迟加载

    ### Hibernate延迟加载详解 #### 什么是Hibernate延迟加载? 在探讨Hibernate延迟加载之前,我们先简要回顾一下Hibernate框架。Hibernate是一种流行的Java持久层框架,它提供了对象关系映射(ORM)的功能,允许...

    Hibernate的延迟加载

    集合类型的延迟加载是Hibernate延迟加载机制中最能显著提升性能的部分。在Hibernate中,集合类型的延迟加载通过使用自定义的集合类实现,如`net.sf.hibernate.collection.Set`,而非标准的`java.util.Set`。这样,...

    hibernate延迟加载技术详细解

    - Hibernate 自动为懒加载属性创建代理类,这些代理类在需要时才加载真实数据。 #### 四、总结 在 Hibernate 中,延迟加载技术是非常关键的一部分,它能够显著提高应用程序的性能。通过合理地选择 Fetching 策略...

    hibernate延迟加载

    ### Hibernate延迟加载详解 #### 一、概述 Hibernate 是一种常用的 Java 持久层框架,它能够将 Java 应用程序与底层数据库之间建立桥梁,简化数据访问逻辑。为了提高应用程序性能,Hibernate 提供了多种优化手段,...

Global site tag (gtag.js) - Google Analytics