`
zengguo1988
  • 浏览: 280247 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Hibernate3属性延迟加载

    博客分类:
  • J2EE
阅读更多

         在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来实现的CGLIBApache的一个开源工程,这个类库可以操纵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集合属性的延迟加载.doc

    在 Hibernate 框架中,延迟加载...总的来说,Hibernate 的集合属性延迟加载是一个强大的工具,可以有效减少内存占用和提高应用程序性能。正确理解和使用延迟加载,可以帮助我们构建高效、可扩展的 Java 应用程序。

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

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

    hibernate 延迟加载深入剖析

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

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

    总的来说,Hibernate的延迟加载是通过在映射文件中配置延迟加载策略,以及利用Java动态代理技术,实现对集合属性的按需加载。它降低了系统的内存压力,提高了数据库操作的效率,是Hibernate优化性能的重要手段之一。...

    hibernate延迟加载解决

    要在Hibernate中启用实体对象的延迟加载,需要在映射文件中为相应的类添加`lazy="true"`属性,例如: ```xml ... ``` **工作原理:** 当执行如下代码时: ```java User user = (User) session.load(User....

    Hibernate延迟加载以及利用Spring

    - `lazy="proxy"`:表示Hibernate将为`Dept`实体创建一个代理对象,只有当真正访问到`Dept`对象的相关属性时,Hibernate才会发起数据库查询,加载实际的`Dept`对象。 - `fetch="select"`:默认值,表示在查询`Emp`时...

    Hibernate的延迟加载

    在Hibernate中启用实体对象的延迟加载,需在实体的映射配置文件中设置`lazy="true"`属性。例如: ```xml &lt;hibernate-mapping&gt; ... &lt;/hibernate-mapping&gt; ``` 当执行`session.load()`方法时,如`User user = ...

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

    3. **事务管理**:延时加载需要在一个有效的Hibernate Session内进行。在多层架构中,确保事务管理正确,尤其是在Service和DAO层之间,是确保延时加载成功的关键。 4. **N+1查询问题**:如果一个实体有多个关联属性...

    Hibernate延迟加载

    在Hibernate中,延迟加载分为三种主要类型:实体对象的延迟加载、集合类型的延迟加载以及属性延迟加载(在Hibernate 3及以上版本支持)。 ### 实体对象的延迟加载 在Hibernate映射文件中,可以通过将`&lt;class&gt;`标签...

    属性延迟加载

    不同于实体和集合类型的延迟加载,Hibernate3的属性延迟加载需要对类的字节码进行增强。这个过程通常使用Hibernate提供的类增强工具(如`HibernateEnhancer`)或者在构建过程中通过ANT任务完成。在ANT中,可以创建一...

    Hibernate延迟加载介绍.doc

    三、属性的延迟加载(Hibernate 3及以上版本) 在Hibernate 3中,引入了属性级别的延迟加载。这意味着除了对象和集合外,单个属性也可以实现延迟加载。例如,如果User类有一个大文本字段`description`,我们可以...

    Hibernate lazy延迟加载

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...

    Flex 与 Hibernate 的延迟加载问题

    在开发Flex与Hibernate集成的应用时,延迟加载(Lazy Loading)是一个常见的挑战,因为Flex客户端无法直接理解和处理Hibernate的延迟加载机制。延迟加载是一种优化策略,它允许关联的对象在真正需要时才被加载,而...

    hibernate延迟加载

    从 Hibernate 3 开始,除了实体对象和集合之外,还可以实现对属性的延迟加载。这使得可以在实体对象已经加载的情况下,只加载需要的特定属性,进一步提高了性能。 ##### 配置示例 ```xml &lt;hibernate-mapping&gt; ...

    Hibernate延时加载与lazy机制.doc

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

    hibernate 延迟加载.docx

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

    hibernate延迟加载技术详细解

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

Global site tag (gtag.js) - Google Analytics