关闭

hibernate—延迟加载

标签: hibernate延迟加载
318人阅读 评论(0) 收藏 举报

工作也有一段时间了,感觉过去的时间里学到了很多东西,又感觉没什么实质性的作用,开发速度再快,完成的再好也不会因此而跟你升职加薪什么的,最多也就是赢得大家的认可。这也是印证了公司技术总监的那句话,工作中只是教你如何将一些技术用的熟练通透,其他的东西还是得靠自己自学,好了,今天就谈一下hibernate延迟加载的实现问题。

其实很多人面试的时候公司都会问你hibernate是怎样实现延迟加载的问题。或者是hibernate2和hibernate3是如何实现的;又或者是hibernate2通过实体对象和集合实现的原理是什么。其实不需要看源码,查阅一下资料就可以得到hibernate实现延迟加载主要是一下三种:

(1)当Session上的load()方法加载一个实体时,会采用延迟加载。

(2)当Session加载某个实体时,会对这个实体的集合属性值采用延迟加载。

(3)当Session加载某个实体时,会对这个实体所单端关联的另一个实体对象采用延迟加载。

Session的load()方法对实体的加载默认采用延迟记载,而get()方法默认的是采用立即加载,如果访问对象标识符属性。它就没有必要初始化代理。

延迟加载确实会给程序的查询效率带来好处,但是有时明确知道数据需要立即加载时,如果Hibernate先默认的使用延迟加载,而后又必须去数据库加载,反而会降低效率,所以,需要根据应用程序的实际情况来灵活的控制是否使用延迟加载,在Hibernate中只需要修改响应的配置来启用或者关闭延迟加载功能:

(1)在记载单个实体,如果不需要延迟记载,就可以使用Session的get()方法。

(2)当Session加载某个实体时,不需要对这个实体中的集合属性延迟加载,而是要立即加载,这个时候可以配置注解lazy=false。

(3)当Session加载某个实体时,不需要对这个实体所单端关联的另一个实体对象延迟记载,也可以添加属性lazy=false。



以上差不多就是我所知道的,此博客只做记录功能,方便后期回忆,也为后期学习别的做基础。当然不喜勿喷,有错误麻烦留言指正,我会根据实际情况及时更改。谢谢大家。

1
0
查看评论

hibernate面试题 --- Hibernate是如何延迟加载的

Hibernate是如何延迟加载的 (1)首先介绍一下延迟加载的几种情况:        当调用Session上的load()方法加载实体时,就会采用延迟加载        ...
  • hanxiaoshuang321123
  • hanxiaoshuang321123
  • 2011-12-24 15:54
  • 2526

深入理解Hibernate的延迟加载机制

 延迟加载的定义  延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就...
  • jojoy_828
  • jojoy_828
  • 2007-12-01 23:45
  • 1333

hibernate annotation方式实现属性级延迟加载

1.在POJO文件需要延迟加载的属性上加“ @Basic(fetch = FetchType.LAZY) ” 2、借助类增强器对二进制Class文件进行强化处理(buildtime bytecode instrumentation)。通过ANT调用Hibernate类增强器对.class文件进...
  • wangshfa
  • wangshfa
  • 2014-05-27 21:13
  • 1782

Hibernate的延迟加载

hibernate中,延迟加载大致可以分为两类,一类是延迟属性加载,另一类是延迟关联实体加载。 普通属性:分两种情况,一种是集合属性,一种是非集合属性(如String、Integer......) 集合属性的延迟加载通过PersistentSet、 PersistentList、Persistent...
  • r91987
  • r91987
  • 2015-01-02 20:13
  • 4677

解决Hibernate延迟加载出现的问题

因为一个事务sql语句一个session打开关闭的过程。所以业务处理的一个事务需要两个sql语句才能解决时,一个sql语句执行后session关闭,第二个sql语句执行时显示no session。所以需要延时session关闭。所以需要配置filter,并在spring配置文件中
  • dragon4s
  • dragon4s
  • 2011-07-20 16:59
  • 4630

hibernate延迟加载导致no session

hibernate的get和load的区别相信大家都知道,load是通过代理加载实体,如果只访问id是不会读库将所有属性加载进来的,这个就是一个延迟加载的简单场景。 如果按照标准的spring+hibernate的整合,当使用load加载一个实体是,会报no session的错误 这...
  • caomiao2006
  • caomiao2006
  • 2016-07-24 21:22
  • 999

什么是hibernate的延迟加载,什么时候使用延时加载,为什么要用延时加载?

所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到...
  • liu_hjiang
  • liu_hjiang
  • 2012-02-21 10:56
  • 3649

Hibernate框架-----属性延迟加载和关系延迟加载(七)

属性的延迟: 我们之前在获取一条数据的时候采用的都是Session的get方法,这种方式不是延迟加载,也就是调用这个方法就会立刻访问数据库查出此对象的数据,当我们采用Session的load方法时,采用的是属性延迟加载,就是只有在访问这个对象的属性,hibernate才会访问数据库进行查询。 下...
  • sinat_15274667
  • sinat_15274667
  • 2016-12-27 00:00
  • 1001

Hibernate延时加载---集合属性的延迟加载

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。 下面先来剖析 Hibernate 延迟加载的“秘密”。 集合属性的延...
  • VLTIC
  • VLTIC
  • 2012-10-29 16:33
  • 1676

hibernate的延迟加载及其与session关闭的矛盾

延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。     那么Hibernate是怎么知道用户在什么时候使用数据了呢?又是如何加载数据呢?     其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体...
  • WarcraftJimmy
  • WarcraftJimmy
  • 2012-05-04 17:16
  • 6898
    个人资料
    • 访问:7116次
    • 积分:181
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类