一、get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回null

  而使用load方法的话,hibernate会认定该id对应的数据一定存在,它也会先去session缓存中去查找,如果没有找到,hibernate会根据lazy属性值来确定是否使用延迟加载。如果lazy=‘true’ ,就使用延迟加载,返回该代理对象,等到真正访问到该对象的属性时才会去二级缓存中查询,如果没有,再去数据库中查询,如果还没有,就抛出org.hibernate.ObjectNotFoundException异常。如果lazy='false' 则不使用延迟加载,这是load的访问机制就和get一样了。

  二、对于load和get方法返回类型:虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在 session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是 原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是 返回的还是代理对象,只不过已经加载了实体数据。

  总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

  疯狂软件学习中心是一所Java人才的专业机构,它最核心的价值在于能让应届大学毕业生与企业无缝对接,课程设计与企业需求高度结合,使其在进入企业后能立即上手。

  学真正Java技术,当然选疯狂软件Java培训机构,打造国内高级Java人才

  疯狂软件Java培训优势

  1. Java是世界第一大编程语言,市场占有率达20%。

  2.广州最专业Java培训机构,多年教学经验。

3.学员技术牛就业率最好,就业薪资都在5000以上。

  4.疯狂软件Java培训课程以项目实战带动教学,上课打破传统课堂模式,以实训项目贯穿教学,带领学生一起做企业真实项目。

  疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。

转载于:https://www.cnblogs.com/gojava/p/3559125.html

Hibernate中get方法和load方法的区别相关推荐

  1. hibernate中get方法和load方法的根本区别

    hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...

  2. python predict_对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...

  3. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  4. ExtJS中listener方法和handler方法的区别

    listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...

  5. Keras中predict()方法和predict_classes()方法的区别

    正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...

  6. VBA中Activate方法和Select方法的区别

    VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...

  7. Hibernate中session的get方法和load方法的区别

    一.发送SQL时机: load方法采用延迟加载(lazy懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用这个对象的数据(对象的数据不包括主键)的时候才发送SQL语句: get方法采用立即 ...

  8. jquery中prop()方法和attr()方法的区别浅析

    引用:http://www.jb51.net/article/41170.htm 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该 ...

  9. Scanner中nextLine()方法和next()方法的区别

    我们在使用扫描器Scanner时,遇到了字符串肯定会使用API中定义好的next()和nextLine()方法.两者一个是能读取空格一个是不能读取空格就像下面的样子 当我们把二者交换位置,再来看一下效 ...

最新文章

  1. ubuntu 使用 adb shell
  2. Huawei S8512
  3. 【2018.5.12】模拟赛之二-ssl2414 简写单词【字符串】
  4. (四)为深度伪造预处理数据集
  5. MySQL分区间进行数据统计
  6. 【基础知识】进程通信之共享内存+信号量
  7. 【TensorFlow-windows】(零)TensorFlow的安装
  8. 2018acm编程大赛题目c语言,编程竞赛题(超牛题目,留下做研究).doc
  9. 51,AVR,PIC,MSP430,STM32单片机比较
  10. Python利用GUI界面制作B站弹幕分析工具
  11. STM32 PWM输出
  12. win10卸载软件_win10系统卸载软件超详细教程
  13. Android 获取Usb设备类型
  14. 当职场中领导问是否有男朋友要怎么应对
  15. Trident API
  16. 一份私人alias清单
  17. (完美可行)小米设备一键激活XPOSED框架方法
  18. Tensorflow slim库
  19. 《现代操作系统》读书笔记之——进程间通信
  20. 重温数据结构:理解 B 树、B+ 树特点及使用场景

热门文章

  1. CV01-语义分割笔记和两个模型VGG ResNet的笔记
  2. php 命令执行crud_如何使用原始JavaScript执行CRUD操作
  3. Spring的基础应用
  4. 鸿蒙系统能内测吗,鸿蒙系统内测用户:使用体验已经超越ios
  5. JAVA猴子选大王问题
  6. 软件测试培训分享:做软件测试工作如何清楚的描述一个bug
  7. pytest实战--参数化parametrize+前置fixture
  8. linxu 下安装mysql5.7.19
  9. [故障解决]图文:python启动报错:api-ms-win-crt-runtime-l1-1-0.dll丢失解决
  10. Spring《五》集合的注入方式