来源:互联网

1、hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate 认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。但是万一数据库中不存在该记 录,那就只能抛异常了,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。在load时会先查 一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实 现延迟加载。对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就 查数据库,数据库中没有就返回null。

2、get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;而load方法创建时首先查询session缓存,没有就创建代理, 实际使用数据时才查询二级缓存和数据库。

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

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

================

两加载方法区别:

区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个 null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出 异常:org.hibernate.ObjectNotFoundException;

区别2:load支持延迟加载,get不 支持延迟加载。

hibernate get() load() 区别相关推荐

  1. 旧调重弹Hibernate与Ibatis区别——深入架构设计

    对于一个粗学者而言一言概况就是:ibatis非常简单易学,hibernate相对较复杂,门槛较高.  但是,hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mappin ...

  2. 旧调重弹Hibernate与Ibatis区别--深入架构设计

    对于一个粗学者而言一言概况就是:ibatis非常简单易学,hibernate相对较复杂,门槛较高.  但是,hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mappin ...

  3. hibernate4 mysql配置文件_Hibernate的数据库连接信息配置文件hibernate.properties与hibernate.cfg.xml 区别...

    Hibernate的数据库连接信息配置文件hibernate.properties与hibernate.cfg.xml 区别 一.问题提出 测试运行一个"MyEclipse2014.Stru ...

  4. hibernate中load和get方法的区别 lazy的策略

    1  get不支持lazy   load支持lazy 2  采用get加载数据时,如果无匹配数据则返回null         load则报异常 --------------------------- ...

  5. Hibernate之load和get的区别

    load和get都会可以起到从数据库中获取持久态数据的作用,但是还有些稍微的区别的. 参考下面的这个例子: @Test(expected = IllegalArgumentException.clas ...

  6. Hibernate,get,load,find方法解析

    关于Hibernate的批量检索,批量更新和批量删除,所执行的操作并不尽遵循相同的规律.这一点使目前的Hibernate2.0还显得有些不够规格 化和强健.但以后的版本中,期望其可以突破这几个屏障. ...

  7. 【转】JPA、Hibernate和Mybatis区别和总结

    很多人都用过java的数据库连接池C3P0,但官方没有说明名称的由来. 据传闻:连接池作者是<星球大战>迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool ...

  8. Hibernate与MyBatis区别

    Hibernate是当前主流的ORM框架,对数据库结构提供了较为完整的封装. MyBatis同样也是非常流行的ORM框架,主要在于pojo与SQL之间的映射关系. 区别: 1.两者最大的区别 针对简单 ...

  9. Hibernate ,Mybatis 区别,以及各自的一级,二级缓存理解

    区别: 1.Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.MyBatis 在查询关联对象或 ...

最新文章

  1. MLPerf Inference 0.7应用
  2. 重磅!“东方理工大学”来了!
  3. ReactNative调研结果
  4. java setmodal 不管用_java – 无法动态设置setVisibility()参数
  5. 解决gitlab内存占用过多的问题
  6. 关于计算机软件系统的知识,会计电算化知识点:计算机软件系统
  7. Python反编译apk,获取各类信息
  8. 计算机操作系统面试题库和答案
  9. 如何改变Android-studio中的APP的名字和图标
  10. Python 正则表达模块详解
  11. 电脑计算机硬盘坏了如何修理,笔记本电脑硬盘坏了怎么修复怎么办
  12. 美团 O2O 供应链系统架构设计解析
  13. java update是什么_javaupdate是什么_tbupdate
  14. webwell安全工具-BeEF
  15. 自学编程应该从哪里开始?
  16. SIGHUP信号与控制终端
  17. Sublime Text:选择变量的所有实例并编辑变量名称
  18. 自动化测试——回顾与展望
  19. 手机滚动字幕软件java_提词器app下载
  20. ie8下table th和td宽度width设置不生效解决办法

热门文章

  1. Ubuntu18.04.3虚拟机安装步骤图文教程
  2. 云服务器上MySQL安装教程(Windows)
  3. 安装好MySQL数据库之后dos下操作步骤及建表命令
  4. android开发中的数据库SQLite的使用
  5. C++ socket编程 实现服务端与客户端的通讯
  6. excel趋势线公式导出_Java 添加、读取、删除Excel中的图表趋势线
  7. burpsuite插件的使用
  8. 各种优秀依赖库,大赞
  9. Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题
  10. 加大weblogic在Linux内存,在linux运行weblogic出现运行内存不足错误,求鞭挞....