(11)Hibernate懒加载
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,1、get、load方法区别?get: 及时加载,只要调用get方法立刻向数据库查询load:默认使用懒加载,当用到数据的时候才向数据库查询。2、懒加载(lazy)2.1、概念概念:当用到数据的时候才
千家信息网最后更新 2025年02月06日(11)Hibernate懒加载
1、get、load方法区别?
get: 及时加载,只要调用get方法立刻向数据库查询
load:默认使用懒加载,当用到数据的时候才向数据库查询。
2、懒加载(lazy)
2.1、概念
概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性。
目的:提升程序执行效率!
2.2、lazy属性的值
在Hibernate中,懒加载对应lazy属性的值。
序号 | 值 | 含义 |
---|---|---|
1 | true | 使用懒加载 |
2 | false | 关闭懒加载 |
3 | extra | 在集合属性(配置当中使用set标签)懒加载的时候提升效率 在真正使用数据的时候才向数据库发送查询的sql; 如果调用集合的size()/isEmpty()方法,只是统计,不真正查询数据! |
2.3、懒加载异常
(1)Session关闭后,不能使用懒加载数据!
(2)如果session关闭后,使用懒加载数据报错:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
(3)如何解决session关闭后不能使用懒加载数据的问题?
方式1: 先使用一下数据
dept.getDeptName();
方式2:强迫代理对象初始化
Hibernate.initialize(dept);
方式3:关闭懒加载
在.hbm.xml配置文件中设置lazy=false;
方式4: 在使用数据之后,再关闭session!
方式1和方式4的区别是:方式1是说,如果想在关闭Session后,仍然想用懒加载的数据,可以先使用一下需要懒加载的数据,这样就会提前加载那些数据;方式4是说,既然懒加载的数据在Session关闭后不能再进行访问,那么它就想办法延迟Session的关闭。
3、示例代码
Department.java
package com.rk.hibernate.j_lazy;import java.util.Set;public class Department{ private int deptId; private String deptName; private Setemps; public int getDeptId() { return deptId; } public void setDeptId(int deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public Set getEmps() { return emps; } public void setEmps(Set emps) { this.emps = emps; } @Override public String toString() { return "Deparment [deptId=" + deptId + ", deptName=" + deptName + "]"; } }
Department.hbm.xml
Employee.java
package com.rk.hibernate.j_lazy;public class Employee{ private int empId; private String empName; private int salary; private Department dept; public int getEmpId() { return empId; } public void setEmpId(int empId) { this.empId = empId; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public Department getDept() { return dept; } public void setDept(Department dept) { this.dept = dept; } @Override public String toString() { return "Employee [empId=" + empId + ", empName=" + empName + ", salary=" + salary + "]"; } }
Employee.hbm.xml
App.java
package com.rk.hibernate.j_lazy;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App{ private static SessionFactory sf; static { sf = new Configuration() .configure() .addClass(Department.class) .addClass(Employee.class) .buildSessionFactory(); } //1. 主键查询,get和load的区别 //这里是对JavaBean类的懒加载 @Test public void testClassGetLoad() { Session session = sf.openSession(); session.beginTransaction(); // get: 及时查询// Department dept = (Department)session.get(Department.class, 1);// System.out.println(dept.getDeptName());// System.out.println(dept.getEmps()); // load,默认懒加载, 及在使用数据的时候,才向数据库发送查询的sql语句! Department dept = (Department)session.load(Department.class, 1); // 方式1: 先使用一下数据 // dept.getDeptName(); // 方式2:强迫代理对象初始化 // Hibernate.initialize(dept); // 方式3:关闭懒加载 // 配置文件中将lazy设置为false。session.getTransaction().commit(); session.close(); // session关闭后,是否能够使用 System.out.println(dept.getDeptName()); } //2.这里是对属性(外键关联)的懒加载 @Test public void testProperty() { Session session = sf.openSession(); session.beginTransaction(); Department dept = (Department)session.get(Department.class, 1); System.out.println(dept.getDeptName()); System.out.println("--------------------------"); System.out.println(dept.getEmps().size()); System.out.println(dept.getEmps().isEmpty()); System.out.println(dept.getEmps()); session.getTransaction().commit(); session.close(); }}
数据
方式
查询
属性
数据库
时候
方法
配置
对象
效率
文件
概念
代理
中将
代码
办法
只是
含义
就是
序号
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
德惠通用网络技术服务质量保障
数据库链要不要实例
网络安全防骗漫画
服务器托管用什么软件好
数据库的安全包含两层含义
比较好的个人云服务器
大连软件开发公司
对于软件开发的认知
互联网科技公司的特性
用友u8登录数据库服务器
asp.net数据库链接
网宿科技2020年互联网百强
兴田网络技术有限公司
文件服务器谁放入的谁有删除
金山岭服务器能调头吗
什么是核酸数据库
华为2288hv5服务器红灯闪
云服务器esc安全设置
中国网络技术公司电话
汉王考勤管理数据库
天津移动网络安全服务招标
魅族钱包服务器错误怎么办
银川办公软件开发多少费用
网络技术和人工智能大数据哪个好
阿里澳新贝斯数据库竞赛
vue服务器渲染
硅谷互联网中的科技
拓新公司是一家软件开发
金飞 网络安全
tcbd数据库注释