Hibernate第八篇【懒加载】

前言

前面在使用Hibernate的时候就说起过了懒加载,但没有好好地说明具体的说明到底是怎么回事…本博文主要讲解懒加载sql

什么是拦截器以及为何要使用懒加载?

懒加载就是当使用数据的时候才去获取数据、执行对应的SQL语句当还没用到数据的时候,就不加载对应的数据!数据库

主要目的就是为了提升Hibernate的性能,提升执行效率markdown

  • get: 及时加载,只要调用get方法马上向数据库查询
  • load:默认使用懒加载,当用到数据的时候才向数据库查询。

懒加载再次体验

User user = (User) session.load(User.class, 1);

        System.out.println("________");
        System.out.println(user);

这里写图片描述

咱们能够在对应的配置文件用一般lazy属性来设置session

关闭懒加载:性能

<class name="IdCard" table="IdCard" lazy="false">

这里写图片描述

lazy有三个属性:spa

  • true 使用懒加载
  • false 关闭懒加载
  • extra (在集合数据懒加载时候提高效率)【只有在set、list等集合标签中使用】
    • 在真正使用数据的时候才向数据库发送查询的sql;
    • 若是调用集合的size()/isEmpty()方法,只是统计,不真正查询数据!

懒加载异常

当Session关闭后,就不能使用懒加载了,不然会报出异常hibernate

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session

这里写图片描述

报出了这个异常,咱们有4种方法解决:代理

  • 方式1: 先使用一下数据
    • dept.getDeptName();
  • 方式2:强迫代理对象初始化
    • Hibernate.initialize(dept);
  • 方式3:关闭懒加载
    • 设置lazy=false;
  • 方式4: 在使用数据以后,再关闭session!
相关文章
相关标签/搜索