用户登录
用户注册

分享至

hibernate延迟加载的原理和好处

  • 作者: 世界核平
  • 来源: 51数据库
  • 2021-01-30
非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。
Hibernate提供的延迟加载机制。这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。
这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比较明显的性能提升。这项技术的一个缺陷是延迟加载技术要求一个Hibernate会话要在对象使用的时候一直开着。



  hibernate具有延迟加载的属性,当你在你的类名.hbm.xml文件中设置lazy=true时,设置延迟加载;延迟加载和方法中的load()对应。当你设置了延迟加载时,程序就认定你这个对象一定存在,如果找不到,抛异常。延迟加载可以提高性能,重点区分load()懒加载和get()的区别



  提高效率,主要是对属性(在数据库中存在相应的表)进行延迟加载(load),在第一次查询的时候,只查询当前的表,当用到延迟加载的对象时(非延迟加载会查询所有关联属性的表),会先从缓存中去找延迟加载的对象(如果session已经关闭,会抛出SessionClosedException),如果对象已经在缓存中,则直接从缓存获取,如果对象不在缓存中,则进入数据库查找,所以,延迟加载是为了提高效率,如果在hibernate映射文件lazy设置成false,用load则和用get效果一样



  延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。



  我遇到的是多表关联是,比如延迟加载=true,那么读取到得数据暂时只是一个表的。如果不是延迟加载,那么多表数据同时读出来。只是提供一个是否当需要时在加载还是提前加载完。延迟加载的意义同楼上说的一样。
软件
前端设计
程序设计
Java相关