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