当前位置: 首页 > news >正文

hibernate中get与load的区别

转自:http://www.cnblogs.com/gxinliug/archive/2011/04/26/2029788.html

load和get一共是2个区别 先讲第一个 延迟加载 
load是true而get是false
意 思就是 load采用的是延迟加载的方式 而get不是,hibernate思想是 既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在,在你 声明 TFaq tfag2=(TFaq)sess.load(TFaq.class, 300); 这句时候,hibernate就干了一件事 
1.查询session缓存
2.缓存中没有这个对象 就创建个代理
因为延迟加载需要代理来执行 所以就创建了个代理
ok 到此为止 这句话就干了个这个 并没有去数据库交互查询
当你使用这个对象 比如tfag2.getTfRtitle()或get方法时候
这个时候 hibernate就去查询二级缓存和数据库,数据库没有这条数据 就抛出异常
整个load方法调用结束 load没什么神奇 这就是他干过所有的事情

load方法讲完了 我在讲一下get方法工作原理
因为hibernate规定get方法不能使用延迟加载 所以和load还是不一样的
TFaq tfag2=(TFaq)sess.get(TFaq.class, 300);
在创建这条语句时候 我们看看hibernate干了哪些事
1.get方法首先查询session缓存 (session缓存就是hibernate的一级缓存 这个概念大家应该清楚吧 )
2.get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。
3.如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
(这个代理实际就是空的对象 并没有去数据库查询得到的 我们叫代理对象,如果 去数据库查询了 返回到了这个对象 我们叫实体对象 就是这个对象真实存在)

一句话总结这2者区别 
get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库

相关文章:

  • 双11_2016
  • hibernate中的Session.flush()
  • hibernate的lazy机制
  • hibernate的lazy策略使用总结
  • springmvc-spring-mybatis实现最简单的登录验证
  • hibernate 的lazy策略存在的问题
  • hibernate中的悲观锁和乐观锁
  • hibernate的查询缓存机制
  • 洛谷 P1521 求逆序对
  • java静态方法的继承
  • Linux内核之内存管理完全剖析
  • 《java与模式》学习系列——简单工厂模式
  • 马尔科夫随机过程的理解
  • 《java与模式》学习系列——工厂模式
  • String a = new String(b);到底是几个对象
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • Angular 4.x 动态创建组件
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • flutter的key在widget list的作用以及必要性
  • HTML5新特性总结
  • JS数组方法汇总
  • Linux各目录及每个目录的详细介绍
  • Python 反序列化安全问题(二)
  • vuex 学习笔记 01
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊sentinel的DegradeSlot
  • 每天一个设计模式之命令模式
  • 面试遇到的一些题
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 网页视频流m3u8/ts视频下载
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Spring Batch JSON 支持
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #图像处理
  • (12)目标检测_SSD基于pytorch搭建代码
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (编译到47%失败)to be deleted
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)Dubbo快速入门、介绍、使用
  • (一)基于IDEA的JAVA基础1
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .form文件_SSM框架文件上传篇
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @GetMapping和@RequestMapping的区别
  • @RequestBody的使用
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [BZOJ 1040] 骑士
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C# 开发技巧]实现属于自己的截图工具
  • [C#]DataTable常用操作总结【转】