千家信息网

hibernate中get和load的区别

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,1. get是立即执行sql语句,load是只有访问了对象的非id属性时才执行sql语句2. get获取一个对象时,如果找不到,则返回null, load获取对象时,如果找不到,则抛出ObjectNo
千家信息网最后更新 2025年11月12日hibernate中get和load的区别

1. get是立即执行sql语句,load是只有访问了对象的非id属性时才执行sql语句

2. get获取一个对象时,如果找不到,则返回null, load获取对象时,如果找不到,则抛出ObjectNotFoundException

3. get获取到的对象是一个真实类型的对象,load获取到的对象是一个代理对象,代理对象的类是Hibernate自己创建的类,该类是真实类的子类!

如何禁用load的延迟加载:

a. 给真实的User类加上final修饰符。

b. 在User.hbm.xml的元素上添加一个lazy="false"


hibernate中sql的执行时间:

1. 当一个对象从没有OID (Object id) 到有 OID的时候,就立即执行sql语句。

2. 当一个对象从有OID (Object id) 到有 OID的时候,就会才事务提交的时候才执行sql语句。

3. load是类级别的延迟加载,当我们使用load加载应数据库中的对象时,如果该对象从来没有使用过,则hibernate根本不查库!

只有访问了该对象的非id属性时,才执行sql语句!!


补充:

hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate认 为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时 才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异 常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存 看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。

对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

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

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

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


对象 数据 数据库 方法 缓存 代理 延迟 查询 语句 实体 属性 时候 根本 只有 实际 类型 还是 一句话 事务 从没 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江西数据库安全审计系统 软件开发到年龄可以坐什么 一道数据库索引的面试题 mc国际服1.17怎么开服务器 报人口失踪会上传数据库吗 北京华腾大厦软件开发 为什么回答网络安全非常重要 怎么以管理员身份登陆服务器 中国银行软件开发地点分布情况 社区开展网络安全感调查 互联网络安全研究方向 软件开发需要什么说明书 linux服务器同一网段网关 vs怎么显示数据库 河南服务器维修调试云主机 网络安全法规制度 网络安全500字心得体会 怪物猎人捏脸数据库 提示存在网络安全问题怎么办 数据库安全搭建 网络技术学习视频动漫 网信办 网络安全通知 网络安全教育手抄报格式 企业网络安全面临的变化 数据库导出excel 思路 对服务器应用和维护有经验吗 数据库实例的组成部分 城厢恒驰网络技术诈骗骗 如果硬盘损坏数据库会不会丢失 网络安全8句
0