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

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

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

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

返回结果:


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

 


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

       

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