Hibernate之get()和load()

本文详细对比了Hibernate框架中get()和load()方法的区别。get()方法会在找不到数据时返回null,而load()则会抛出异常。此外,load()利用代理类实现延迟加载,而get()则直接加载数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate可通过get()和load()获取对象,而他们又有所不同。

1、如果未能找到符合条件的记录,get()方法返回null(NullPointException异常),而load()将会报ObjectNotFountException

2、load()方法返回实体的代理类,而get()永远只返回实体类

3、load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接sql查询

上面三条算是网上的“标准”答案,因为大都这么说。

在其他博客里看到一评论说,这三条说的都不太标准。在此也不在赘述了...只说了一条根本的区别:

一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;

而对于get方法 hibernate一定要获取到真实的数据,否则返回null.

load()是等真正用到对象时才发sql语句,而get()直接从数据库加载 不会延迟

通过打印*.getClass来判断是实体类还是代理类

get()方法

class com.itmyhome.model.Student


load()方法

class com.itmyhome.model.Student_$$_javassist_0


可见load()返回的是代理类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值