面试题: get、load方法区别?面试
get: 及时加载,只要调用get方法马上向数据库查询sql
load:默认使用懒加载,当用到数据的时候才向数据库查询。 数据库
懒加载:(lazy)session
概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性。spa
目的:提供程序执行效率!hibernate
lazy 值代理
true 使用懒加载对象
false 关闭懒加载get
extra (在集合数据懒加载时候提高效率)it
在真正使用数据的时候才向数据库发送查询的sql;
若是调用集合的size()/isEmpty()方法,只是统计,不真正查询数据!
懒加载异常
Session关闭后,不能使用懒加载数据!
若是session关闭后,使用懒加载数据报错:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
如何解决session关闭后不能使用懒加载数据的问题?
// 方式1: 先使用一下数据
//dept.getDeptName();
// 方式2:强迫代理对象初始化
Hibernate.initialize(dept);
// 方式3:关闭懒加载
设置lazy=false;
// 方式4: 在使用数据以后,再关闭session!