hibernate get 和 load 区别

引用 : 

相同点: 都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例, 
不同点: 
load方法: hibernate认为该id对应的对象(数据库记录)在数据库 中是一定存在的,进而使用代理来延迟加载该对象。在用到该对象中的属性数据时才查询数据库,若查不到,则抛出 ObjectNotFoundEcception 异常.load方法抛异常是指在使用该对象的数据且数据库中不存在该数据时,而不是在创建这个对象时。由于 session 中的缓存对于hibernate来说是个较廉价的资源,所以在load 时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。 
get方法: hibernate会确认该id对应的数据是否存在,首先在session 缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。 


引用 : 
get()和load()之间的一个区别在于他们如何表明实例无法被找到。如果数据库中不存在包含给定标示符的行,get()就会返回null。load()方法则抛出一个 
ObjectNotFoundException。由你选择喜欢的错误处理方式。 
更重要的是,load()方法可能返回一个代理(proxy),一个占位符,而不是命中(hit)数据库。这个结果就是稍后你可能得到一个ObjectNotFoundException, 
一旦你试图访问返回的占位符,就立即强制它初始化。(这也称作延迟加载(lazy loading))load()方法始终试图返回一个代理,如果它已经由当前的持久化上下文管理,则返回一个已经初始化的对象实例。get()方法从不返回代理,它始终命中数据库。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值