分享好友 最新动态首页 最新动态分类 切换频道
莆田seo接单/seo关键词排名优化价格
2024-12-27 12:37

   一、Hibernate的抓取策略

          Hibernate抓取策略是指当应用程序需要在关联关系间进行导航的时候,Hibernate如何获取关联对象的策略。

          Hibernate有如下几种抓取策略

             1、链接抓取(Join fetching):Hibernate 通过在select语句中使用out join来获取对象的关联实例或者关联集合。

             2、查询抓取(Select fetching):发送另外一条select语句抓取当前对象的关联实体或者关联集合。除非我们显示地指定lazy=”false”禁止延迟抓取,否则只有当我们真正访问了关联关系的时候才会执行第二条select语句。

             3、子查询抓取:另外发送一条SELECT 语句抓取在前面查询到(或者抓取到)的所有实体对象的关联集合。除非你显式的指定lazy="false" 禁止延迟抓取(lazyfetching,否则只有当你真正访问关联关系的时候,才会执行第二条select语句。

             4、批量抓取(Batch fetching) - 对查询抓取的优化方案, 通过指定一个主键或外键列表,Hibernate使用单条SELECT语句获取一批对象实例或集合。

          

          Hibernate会区分下列各种情况

             1、Immediate fetching,立即抓取 - 当宿主被加载时,关联、集合或属性被立即抓取。

             2、Lazy collectionfetching,延迟集合抓取- 直到应用程序对集合进行了一次操作时,集合才被抓取。(对集合而言这是默认行为。

             3、"Extra-lazy"collection fetching,"Extra-lazy"集合抓取 -对集合类中的每个元素而言,都是直到需要时才去访问数据库。除非绝对必要,Hibernate不会试图去把整个集合都抓取到内存里来(适用于非常大的集合)。

             4、Proxy fetching,代理抓取 - 对返回单值的关联而言,当其某个方法被调用,而非对其关键字进行get操作时才抓取。

             5、"No-proxy"fetching,非代理抓取 - 对返回单值的关联而言,当实例变量被访问的时候进行抓取。与上面的代理抓取相比,这种方法没有那么“延迟”得厉害(就算只访问标识符,也会导致关联抓取)但是更加透明,因为对应用程序来说,不再看到proxy。这种方法需要在编译期间进行字节码增强操作,因此很少需要用到。

             6、Lazy attributefetching,属性延迟加载 - 对属性或返回单值的关联而言,当其实例变量被访问的时候进行抓取。需要编译期字节码强化,因此这一方法很少是必要的。

         二、选择合理的抓取策略

         定制合理的抓取策略对系统的提升有很大的作用。

         查询抓取在N+1查询的情况下是极其脆弱的,因此我们可能会要求在映射文件中定义连接抓取(fetch=”join”)。

但是在映射文件中定义的抓取策略将会产生以下影响:通过get()或者load()方法获取数据。。只有在关联之间进行导航时,才会隐式的取得数据。

         条件查询,使用了subselect抓取的HQL查询

         不管使用哪种抓取策略,定义为非延时的类图会保证一定装载入内存,这就意味着一条HQL查询后紧跟着一系列的查询。

         所以我们一般是这样做:通常情况下,我们并不使用映射文件进行抓取策略的定制,更多的是,保持其默认值然后在待定事物中,适用HQL的左连接对其进行重载。

         

         Hibernate推荐的做法也是最佳实践:把所有对象关联的抓取都设为lazy!然后在特定事务中进行重载。

         这种考虑是基于:对象之间的关联式错综复杂的,有时候哪怕我们只是一个简单的load,也会导致很多对象被load出来!所以在Hibernate中,所有对象关联都是lazy的。

 

         四、Hibernate的批量抓取

         在Hibernate中,对于关联抓取,可以定义每次抓取数据的数量。批量地将数据载入内存,减少与数据库交互的次数。在应用程序中可以定义默认的关联抓取数量。

         Hibernate提供了两种批量抓取方案:类级别和集合级别。


         类级别的批量查询。如果一个Session中需要载入30个student实例,在student中拥有一个成员变量class,该class执行Class对象。如果lazy=“true”,如果们需要变量整个student集合,每一个student都需要getClass(),hibernate在默认情况下回执行30次select查询语句,得到Class对象。这个时候可以通过在映射文件的Class属性,batch-size。

         这样Hibernate将只需要执行两次查询即可:15,15。

         集合级别的批量查询。如果我们需要遍历Class所拥有的所有Student对象,在Session中需要载入30个Class对象,遍历Class集合将会引起30次Select查询,每次查询都会调用getStudents()。如果在Class的映射定义中,允许对Students进行批量抓取,则Hibernate就会预先加载整个集合。

最新文章
笔记本怎么更新驱动
笔记本电脑的驱动更新是保持系统稳定和硬件性能的重要步骤。以下是几种常见的驱动更新方法,帮助您轻松完成驱动更新。首先,可以通过设备管理器来更新驱动程序。右键点击屏幕左下角的“开始”菜单,选择“设备管理器”。在设备管理器中,展
济南专业SEO推广公司助力企业网络营销飞跃
济南SEO推广推荐公司,专业提供全方位网络营销服务,助力企业高效提升品牌知名度,实现网络营销腾飞。凭借精湛技术和丰富经验,助您在竞争激烈的市场中脱颖而出。随着互联网的飞速发展,越来越多的企业开始重视,希望通过互联网拓展市场,
电脑打不开pdf文件需要安装什么软件(电脑打不开pdf文件怎么办)
摘要:电脑打不开pdf文件需要安装什么软件(电脑打不开pdf文件怎么办),电脑突然打不开PDF文件的原因可能是缺少专用的阅读器,一般来说电脑都是有自带的,没有估计是被自己删除,具体解决方法步骤如下:1、首先找到一个PDF文件并单击。2、借
电饭煲排行榜及选购技巧
在现今社会,各种电器的使用已经成为主流。厨房里对食品进行蒸、煮、炖、煨等多种操作功能都离不开电饭煲作用的发挥。电饭煲,又称作电锅、电饭锅。是利用电能转变为内能的炊具,使用方便,清洁卫生。电饭煲作为一种厨房常用的电器,在生活
靖江市深入推进“高效办成一件事” 已办理近7.5万件 办理时限缩短80%
12月12日上午,市数据局举办政务服务开放日活动,并聚焦“高效办成一件事”,与卫健委、住建局、交通运输局、市场监管局等部门深入开展“我陪群众走流程”活动。行风监督员代表受邀参加活动。数据显示,2024年,市、镇、村三级政务服务大厅
硬核、高能,龙蜥社区走进中科方德 MeetUp 圆满结束(附技术PPT下载)
11 月 29日,以“OS 升级 迭代·兼容·安全”为主题的​​龙蜥社区「走进系列」​​之走进中科方德 MeetUp 在北京成功召开,线上观看人次超 2 万。现场来自海光信息、阿里云、浪潮信息、三未信安等企业的专家为大家带来了精彩的主题演讲,
人工智能机器视觉相机:定义、分类以及应用
引言:人工智能(Artificial Intelligence,简称AI)的快速发展使得人工智能机器视觉相机成为了制造业、安防监控、智能交通等领域的关键技术。本文将从定义、分类和应用三个方面来阐述人工智能机器视觉相机的相关知识。正文:定义:人工智
華為巴黎旗艦店舉辦GoPaint全球創作活動
/美通社/ -- 華為在其巴黎旗艦店(巴黎歌劇院旁)成功舉辦了GoPaint全球創作活動。本次活動由兩位才華橫溢的插畫師Mayada和Kenza主導,旨在通過可在華為MatePad系列設備上使用的GoPaint應用展現數字藝術的潛力以及實現創作的便捷性。該活動
科技通报“小拉抢单器新款怎么用教程”其实确实有挂
小拉抢单器新款怎么用教程是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微下载使用。抢单可以一键让你轻松成为“必赢”。其操作方式十分简单,打开这个应用便可以自定义抢单系统规律,只需要输入自己
盘点即将上市的新款手机 你更喜欢哪一款?
点击上方电脑爱好者关注我们转眼2019年已经过半,手机圈的竞争也即将进入下半场,5G、折叠屏、UFS3.0、屏幕摄像头、全身无开孔设计等元素都会一一在新品中呈现。作为消费者,咱们暂时无需将目光投的太远,如果聚焦当下,将于近期上市的新款
相关文章
推荐文章
发表评论
0评