Hibernate的get与load的区别

Hibernate中session 的load和get方法的区别:

    延迟加载:load是true   而get是false

思就是load采用延迟加载的方式,而get不是,hibernate思想是  既然这个方法支持延迟加载,他就认为这个对象一定存在于数据库中。在你执行语句 USER user=(USER)session.load(USER.class,id)的时候,hibernate就干了一件事

1、查询session缓存  ,如果缓存中没有对象那么就创建一个代理。

因为延迟加载需要代理来执行,所以就创建了个代理,ok到此为止,  这句话就干了这个,并没有去数据库交互查询。在使用的时候load方法会去二级缓存中查询,查询不到就到数据库中查询,如果数据库也不存在,那么就会抛出ObjectNotFoundException;   而get()方法不会假定数据是在数据库中存在的,如果不存在他返回的是null

 

load查询顺序--->session一级缓存查找---->找不到的话创建代理---->使用的时候首先查找二级缓存-->二级缓存中没有的话查找数据库--->数据库中还没有的话那就抛出ObjectNotFoundException

get查找顺序 --->session一级缓存---->Hibernate二级缓存 --->数据库中-->如果还没有就返回NULL

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值