• Hibernate第八篇【懒加载】


    前言

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

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

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

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

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

    懒加载再次体验

            User user = (User) session.load(User.class, 1);
    
            System.out.println("________");
            System.out.println(user);
    

    这里写图片描述

    我们可以在对应的配置文件用通常lazy属性来设置

    关闭懒加载:

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

    这里写图片描述

    lazy有三个属性:

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

    懒加载异常

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

    
    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!
  • 相关阅读:
    oracle计算记录条数
    oracle 尽量多使用COMMIT
    oracle 用TRUNCATE替代DELETE
    oracle 删除重复记录
    oracle整合简单,无关联的数据库访问
    oracle使用DECODE函数来减少处理时间
    oralce 减少访问数据库的次数
    古城钟楼微博地支报时程序铛,100行代码实现,价值一天20万粉丝
    C#中HttpWebRequest与HttpWebResponse的使用方法
    C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7202963.html
Copyright © 2020-2023  润新知