网上关于get和load的讨论很多,下面是我的一些浅显认识。
从源码角度来讲:很简单,LoadType不同。
LoadType是LoadEventListener的内部类,源码中一共定义了7种,GET和LOAD最常用。
还有一个IMMEDIATE_LOAD(nakedEntityReturned为true)在加载代理实际数据的过程中使用。
这个类的对象在创建的时候采用了builder模式。
而GET和LOAD两种LoadType主要的区别是:
GET:allowNulls为true;allowProxyCreation为false
LOAD:allowNulls为false;allowProxyCreation为true
正因为这两个属性的不同,所以决定了get和load两个加载方法的差别:
1.如果在数据库中没有找到请求的数据,get选择返回null,而load选择抛出异常。
2.如果在缓存中没有找到代理,get直接去加载真实数据,load则返回代理,并把代理填入缓存。这也是为什么有时候get会返回代理对象的原因。
主要的区别就这些,其他博主说的是否使用二级缓存的区别都是没有根据的。
因为进入实际加载过程中,get和load调用的实际加载方法是一样的:
loadFromSessionCache
loadFromSecondLevelCache
Load From DataSource
至于为什么代理对象实际加载的过程中抛出异常,解释如下:
真正加载代理(3.3.2版本使用是的javassist代理)数据的时候,类AbstractLazyInitializer的initialize方法先执行session.immediateLoad方法,然后由checkTargetState()方法检查返回的实体是否为空,此方法调用handleEntityNotFound方法,如果实体返回的是null,那么抛出异常ObjectNotFoundException。源码大家可以自己看
分享到:
相关推荐
Hibernate3.3.2_项目源码Hibernate3.3.2_项目源码Hibernate3.3.2_项目源码Hibernate3.3.2_项目源码Hibernate3.3.2_项目源码Hibernate3.3.2_项目源码
最新的hibernate源代码,网上最新版本,有兴趣的朋友可以研究下。如果哪位朋友对OSGi的企业分布式应用和负载均衡有研究也希望分享下,大家一起研究,谢谢!
hibernate-c3p0-3.3.2.GA.jar
hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2hibernate3.3.2...
hibernate-3.2源代码 以及所需jar包 和帮助文档
hadoop 3.3.2源码包
hibernate core 3.3.2.GA 源代码 源码hibernate core 3.3.2.GA 源代码 源码hibernate core 3.3.2.GA 源代码 源码hibernate core 3.3.2.GA 源代码 源码hibernate core 3.3.2.GA 源代码 源码hibernate core 3.3.2.GA ...
尚学堂_Hibernate3.3.2_项目源码,尚学堂_Hibernate3.3.2_项目源码
对应hibernate3.jar,是从Hibernate官方发布版本(hibernate-distribution-3.3.2.GA-dist.zip)的\project\core\src\main\java\目录下获取。
hibernate3.3.2
hibernate3.3.2官方完整版,内含java调用完整教程
hibernate-distribution-3.3.2.GA-dist 包含jar 包含javadoc
Hibernate 3.3.2,Hibernate 3.5.5,hibernate-release-4.3.6.Final
hibernate3.3.2api 此文档根据hibernate3.3.2源码生成为英文文档
hibernate-ehcache-3.3.2.GA.jar
hibernate下的kingbase的jar文件,需要的同学自行下载
Zxing最新3.3.2版本的源码包,可以打包成jar包,用于生成二维码
hibernate-distribution-3.3.2.GA-dist.zip
Hibernate框架
Hibernate 3.3.2 文档,请下载后用解压缩软件解压查看