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
本文深入解析Hibernate中session的load和get方法的实现原理和使用场景,重点在于理解load方法采用延迟加载的方式,而在执行时首先会在缓存中查找,如果没有则创建代理;get方法则不会假定数据存在于数据库中,若不存在直接返回null。
432

被折叠的 条评论
为什么被折叠?



