Hibernate懒加载

在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。

我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。

实现懒加载的前提:

1 实体类不能是final的

2 能实现懒加载的对象都是被CGLIB(反射调用)改写的代理对象,所以不能是final修饰的
3 须要asm,cglib两个jar包
4 相应的lazy属性为true
5 相应的fetch属性为select
下面几种可以实现懒加载功能:

1、   通过Session.load()实现懒加载

load(Object, Serializable):根据id查询 。查询返回的是代理对象,不会立刻访问数据库,是懒加载的。当真正去使用对象的时候才会访问数据库。

用load()的时候会发现不会打印出查询语句,而使用get()的时候会打印出查询语句。

使用load()时如果在session关闭之后再查询此对象,会报异常:could not initialize proxy – no Session。处理办法:在session关闭之前初始化一下查询出来的对象:Hibernate.initialize(user);

使用load()可以提高效率,因为刚开始的时候并没有查询数据库。但很少使用。

2、one-to-one(元素)懒加载:

懒加载默认是关闭的,只有基于外键关联方式的“一对一”才用懒加载。必需同时满足下面三个条件时才能实现懒加载

(主表不能有constrained=true,所以主表没有懒加载)

lazy!=false 2)constrained=true 3)fetch=select

3、one-to-many (元素)懒加载:

当我们查询的是主对象时,将person和idcard外连接查询出person对象和idcard对象没有懒加载。当我们查询的是从对象时,对于idcard所关联的person对象是懒加载。

这种关联方实质性懒加载是非常有效的,Hibernate默认对它就是使用懒加载的,默认就是以下条件:

1)lazy!=false 2)fetch=select

4、 many-to-one(元素)实现了懒加载。

多对一的时候,查询主对象时默认是懒加载。即:查询主对象的时候不会把从对象查询出来。

多对一的时候,查询从对象时默认是懒加载。即:查询从对象的时候不会把主对象查询出来。

hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy=”proxy”.具体设置成什么要看你的需求,并不是说哪个设置就是最好的。在<many-to-one>与<one-to-one>标签上:当为true时,会有懒加载特性,当为false时会产生N+1问题,比如一个学生对应一个班级,用一条SQL查出10个学生,当访问学生的班级属性时Hibernate会再产生10条SQL分别查出每个学生对应的班级.

lazy= 什么时候捉取

fetch= 捉取方式:select=关联查询;join=连接表的方式查询(效率高)

fetch=join时,lazy的设置将没有意义.

.5、many-to-many (元素) :

这种关联方实质性懒加载是非常有效的,Hibernate默认对它就是使用懒加载的,默认就是以下条件:

1)lazy!=false 2)fetch=select

6、.能够懒加载的对象都是被改写过的代理对象,当相关联的session没有关闭时,访问这些懒加载对象(代理对象)的属性(getId和getClass除外)hibernate会初始化这些代理,或用Hibernate.initialize(proxy)来初始化代理对象;当相关联的session关闭后,再访问懒加载的对象将出现异常。

7、抓取策略

a)        select:作为默认值,它的策略是当需要使用到关联对象的数据时另外单独发送select语句,抓取当前对象的关联对象的数据。即懒加载。

b)        join:他的策略时使用一条select语句用内连接来获取对象的数据和关联对象的数据,此时关联对象的懒加载失效。

除了上面说的在映射文件中配置,lazy=false之外,我们还可以通过以下方式来解决懒加载问题。

1.明确初始化:

在session还没有关闭时,访问一次xxxx.getXxx(),强制访问数据库。或者Hibernate.initialize(xxx)

2.openSessionView   这个往往需要过滤器配合使用

3.在ssh中,可以实现在service层,标注方式来解决懒加载。

本文地址:http://www.blogfshare.com/hibernate-lazy.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站天呐&#xff01;最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前&#xff0c;英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司&#xff0c;20多年前&#xff0c;威盛依靠数笔收购获得了x86授权&#xff0c;开发了数款X86芯片&#xff0c;由于性能与英特尔和AMD差距太大&#xff0c;威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目&#xff0c;用到了mapinfo的开发&#xff0c;所以想把自己研究的一些东西记录下来&#xff0c;一则供自己使用&#xff0c;二则供一些同道中的朋友参考&#xff0c;有什么不当之处&#xff0c;请提示&#xff0c;再做修改。 首先要了解一下mapinfo的基本概念&…

研究生计划-心得征程

以前定过一个计划&#xff0c;现在觉得有必要在重新规划一次&#xff0c;毕竟见识和认识有深了 1、编译原理&#xff0c;前些天是把数据结构写完了&#xff0c;编译原理也一直没看&#xff0c;所以下一步深入学习编译原理 2、学习PHP框架&#xff0c;像wordpress和yii,PHP也算入…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序&#xff0c;并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构&#xff1b;显示jar和zip文件的内容java下载安装&#xff0c;而不是通过右键单…

自带数据线的迷你数显充电宝,好用到哭

▲ 点击查看无论是付钱办事坐车&#xff0c;还是游戏追剧闲聊&#xff0c;有个手机就够了啊~这也就导致了&#xff0c;出门最怕的不是没带钱&#xff0c;而是带了手机却没电了。手机没电&#xff01;这简直能要了老命啊&#xff01;幸好有充电宝“续命”&#xff01;但每回在打…

值得永久收藏的 C# 设计模式套路(二)

设计模式套路&#xff0c;第二弹。在第一篇中&#xff0c;主要写了创造模式相关的几种套路。如果你是刚看到这个文章&#xff0c;建议你先去看看第一篇 传送门。这一篇&#xff0c;我们说说结构模式相关的套路。结构模式&#xff0c;主要作用是将类型、对象和其它内容放在一起&…

VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器安装数据库服务器分别在三台机器上安装SQL2008运行安装程序图示3.1点击确定继续图示3.2使用全新安装图示3.3图示3.4输入密钥继续图示3.5接受条款图示3.6进行安装图示3.7图示3.8图示3.9图示3.10图示3.11图示3.12图示3.13指定启动SQL账户图示3.14指定管理员图…

sql查询从m到n的这几条记录

查询从m到n的这几条记录 m-ngoselect top (n-m1) * from stu where id not in (select top (m-1) ID from stu ) --51-100select top 50 * from stu where id not in (select top 50 ID from stu )转载于:https://www.cnblogs.com/kuang/archive/2012/07/19/2599344.html

enmu枚举类型

在实际问题中&#xff0c;有些变量的取值被限定在一个有限的范围内。例如&#xff0c;一个星期内只有七天&#xff0c;一年只有十二个月&#xff0c;一个班每周有六门课程等等。如果把这些量说明为整型&#xff0c;字符型或其它类型显然是不妥当的。为此&#xff0c;C语言提供了…

java定义接口_一文知道Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似&#xff0c;也是分为接口的声明和接口体&#xff0c;其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下&#xff1a;方法&#xff1a;接口中的方法只有定义而没有被实现。1.接口是一组行为的规范、定义&…

告诉你一个可怕的数学事实:公路越多,城市越堵!

全世界只有3.14 % 的人关注了爆炸吧知识生活依旧美好上周&#xff0c;刘强西带着小天到附近的清扬山放松一下。然而&#xff0c;从京西大旅馆有两条路可以到清扬山。一条是金龙大道&#xff0c;前半程走完需要20分钟&#xff0c;但可怕的是路窄&#xff0c;车辆一多就慢&#x…

官方精简版!Windows 10 LTSC 2021 正式发布

微软现已正式发布 Windows 10 企业版 LTSC 2021。LTSC 全称为 the Long-Term Servicing Channel&#xff0c;即长期服务频道。使用 LTSC 服务模型&#xff0c;Windows 10 电脑可以延迟接收功能更新&#xff0c;功能更新每 2-3 年&#xff08;Windows 10 家庭版和专业版等此前为…

完全卸载mysql数据库图文教程

见&#xff1a;http://jingyan.baidu.com/article/f96699bbaa8fc1894f3c1b5a.html

不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...

自从掌握了单元测试的要领之后&#xff0c;经常写测试&#xff0c;做测试&#xff0c;也非常喜欢做单元测试。我的文章《数据采集&#xff1a;完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库》中的代码&#xff0c;也是个测试方法&#xff0c;源代码在QQ群中公…

Struts2内置拦截器和自定义拦截器

内置拦截器 Struts2中内置类许多的拦截器&#xff0c;它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器&#xff0c;拦截器才可以正常的工作和运行。Struts 2已经为您提供丰富多样的&#xff0c;功能齐全的拦截…

基于eclipse RCP的文件夹管理工具

总的来说, Windows7的文件夹浏览器已经提供了很好的功能, 但是也有一些鞭长莫及的地方,比如: 无法搜索指定文件夹里面某些文件夹的文件我将经常使用的图标资源分成几个目录存放于一个文件夹中, 这些资源风格不同,来源也不同. 有些是来自开源项目的, 有些是来自iconfinder, 还有…

.NET 6新特性试用 | 异步流

前言IAsyncEnumerable<T>支持返回异步迭代的枚举器&#xff0c;但在.NET 6之前&#xff0c;即使在API中使用了IAsyncEnumerable<T>&#xff0c;它还是使用同步方式输出&#xff0c;首先将结果缓冲到内存中&#xff0c;然后再写入响应中&#xff1a;[HttpGet] publi…

今日份凡尔赛培训满分了没?

1 今日份凡尔赛培训又精进了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 西班牙修复失败的雕像▼3 这裤子长的过分了&#xff01;▼4 一般人肯定问不出的问题▼5 令人无语的重婚案&#xff08;via.头条新闻&#xff09;▼6 孩子你太精了些▼7 哦吼&#xf…

WEB服务器 - Apache、Nnginx、Lighttpd的比较和择优(转)

Apache服务器和nginx的优缺点&#xff1a; 我们之前大量使用Apache来作为HTTPServer。 Apache具有很优秀的性能&#xff0c;而且通过模块可以提供各种丰富的功能。 优点&#xff1a; 首先Apache对客户端的响应是支持并发的 &#xff0c;运行httpd这个daemon进程之后&#x…