非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。
Hibernate提供的延迟加载机制。这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。
这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比较明显的性能提升。这项技术的一个缺陷是延迟加载技术要求一个Hibernate会话要在对象使用的时候一直开着。
hibernate具有延迟加载的属性,当你在你的类名.hbm.xml文件中设置lazy=true时,设置延迟加载;延迟加载和方法中的load()对应。当你设置了延迟加载时,程序就认定你这个对象一定存在,如果找不到,抛异常。延迟加载可以提高性能,重点区分load()懒加载和get()的区别
提高效率,主要是对属性(在数据库中存在相应的表)进行延迟加载(load),在第一次查询的时候,只查询当前的表,当用到延迟加载的对象时(非延迟加载会查询所有关联属性的表),会先从缓存中去找延迟加载的对象(如果session已经关闭,会抛出SessionClosedException),如果对象已经在缓存中,则直接从缓存获取,如果对象不在缓存中,则进入数据库查找,所以,延迟加载是为了提高效率,如果在hibernate映射文件lazy设置成false,用load则和用get效果一样
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
我遇到的是多表关联是,比如延迟加载=true,那么读取到得数据暂时只是一个表的。如果不是延迟加载,那么多表数据同时读出来。只是提供一个是否当需要时在加载还是提前加载完。延迟加载的意义同楼上说的一样。
热门文章更多>>
标签更多>>
专题更多>>
最新文章更多>>
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
- 使用 C# 6.0 功能运行 TFS 构建
鱼面小肥鱼