(1):延迟加载的概念
Hibernate从数据库获取某一个对象数据,获取某个对象的集合属性时、获取某个对象锁关联的另一个对象时,由于没有使用这个数据,hibernate不会从数据库真正加载这个数据,而是创建一个代理对象来代替该对象,代理对象所有属性赋默认值,真正需要该对象数据时才从数据库加载该对象数据。
to boils down :数据用到时再查sql从数据库取
(2):延迟加载的情况
1、session.load()方法加载实体时,获取到的是代理对象,属于延迟加载
//返回一个代理对象 load()延迟加载
Account acc=(Account)session.load(Account.class,new Long(1));
//get()立即加载,访问标识符属性,不会初始化代理对象,没有发送sql查询数据库,返回null
System.out.println(acc.getId());
//查询对象属性,get()立即加载,创建真实对象,去数据库查询sql返回数据
System.out.println(acc.getLoginName());
tip: get方法不支持延迟加载,get方法查询表中没有记录时不会报错
load()方法查询对象不存在时会报异常,ObjectNotFoundException
2、query.iterate()
3、Session加载某个实体时,会对单端关联的实体延迟加载
4、关联映射
5、Fetch =lazy
(3):延迟加载的好处
1、降低了内存开销
2、避免加载程序中不需要访问的关联对象,提高应用程序的性能