首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate3.2.6 Session加载数据时get跟load方法的区别

2012-09-18 
Hibernate3.2.6 Session加载数据时get和load方法的区别查找顺序:??? get和load方法的查找顺序完全相同,不

Hibernate3.2.6 Session加载数据时get和load方法的区别

查找顺序:
??? get和load方法的查找顺序完全相同,不管类的属性配置中:lazy="true"或者lazy="false"

    ??? 首先在session缓存中查找:loadFromSessionCache()??? 然后在二级缓存SessionFactory中查找:loadFromSecondLevelCache()??? 最后从数据库查找:loadFromDatasource()

返回结果:


??? 相同:get和load方法如果在一级和二级缓存中找到持久化对象,直接返回该持久化对象,不会对该对象进行任何包装。(返回的对象:可能是原生的对象,也可能是代理的对象,取决于缓存中对象本身是什么对象)

?


??? 不同:如果在一级和二级缓存中找不到相应的对象:get查询数据库,找到:返回原生的持久化对象,找不到:返回null.

??? ???

load查询数据库:如果lazy="true", 或者没有配置lazy属性(默认为true) 且未指定锁(默认LockMode.NONE)?? 找到:?? 返回代理的持久化对象??? ?? 找不到:返回代理的空数据对象,不能对该对象进行获取数据的操作,否则抛出 ObjectNotFoundException如果lazy="false"或者指定锁(LockMode.READ ...)??? ??? 找到:返回原生的持久化对象??? ??? 找不到:抛出 ObjectNotFoundException

?

?

热点排行