它是Hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。Hibernate中主要是通过代理(proxy)机制来实现延迟加载。
Address adr = session.load(Address.class,2L);//直接返回的是代理对象
System.out.println(adr.getId());//没有发送sql到数据库中
System.out.println("---------");
System.out.println(adr.getName());//创建真正的对象实例,发送sql语句到数据库
System.out.println("---------");
System.out.println(adr.getUser());//创建真正的对象实例,发送sql语句到数据库
如何关闭懒加载:
-
加载单个实体,如果不需要延迟加载,就可以使用session的get()方法。
Address adr = session.get(Address.class,2L);//直接创建真正的对象实例
-
当session加载某个实体时,不需要对这个实体中的集合属性值延迟加载,而是要立即加载。这是可以在映射文件中这个集合的配置元素(set bag list)添加属性lazy=false;
-
当session加载某个实体时,不需要对这个实体所单端关联的另一个实体对象延迟加载,就可以在影射文件中针对这个单端关联的配置元素(<one-to-one><many-to-one>)添加lazy=false;
<many-to-one lazy="false" name="user" class="com.qfedu.entity.User" column="user_id"></many-to-one>