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

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发出的时间实现懒加载

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/87519949