欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate基础(十):延迟加载(懒加载)

程序员文章站 2024-03-26 14:08:23
...

1.懒加载的作用:提高效率

 

2.类的懒加载

           (1).使用:lazy属性设置为true才行

<hibernate-mapping>
    <class name="com.domain.user" table="user" lazy="true">
        ...
    </class>
</hibernate-mapping>

           (2).类的懒加载只针对普通属性有效

           (3).session.load()和session.get()区别:(实质就是懒加载的区别)

                      ^1.get()一旦调用就去查询,并且返回的是实体对象。load()是在访问非ID字段时才去查询,并且返回的是代理对象。因为load()是访问时才查询的,而查询需要依靠session对象,所以当session关闭的情况下,会抛出LazyInitializationException

                      ^2.get()查不到会抛NullPointerException,load()会抛ObjectNotFoundException

 

3.集合的懒加载

           (1).集合默认就是懒加载的

           (2).当通过一个对象加载关联的集合时,是懒加载。

                如果把集合的懒加载的懒加载变成false,则在获取classes时就将集合加载了

           (3).集合的懒加载除了true和false,还有extra:

                 当使用聚合函数(count,max,min,avg)时,此时不需要加载整个集合的值就可以得到

 

4.单端关联的懒加载:让多的一方加载一的一方

           many-to-one中lazy的值可以是false,proxy,no-proxy。后两者相当于true

 

5.当报no-session的错误时,实质是数据还没加载出来,session关闭了

 

6.懒加载的原理:通过改变sql发出的时间实现懒加载