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