您的位置:首页 > 其它

Hibernate的get与load的区别

2013-11-03 16:48 288 查看
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

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息