一、延迟加载及作用?
    延迟加载又叫懒加载。是指在访问数据时,当数据用到的时候才被加载,没有被用到的时候不加载。
二、这样做有什么好处呢?
    好处就是每次访问数据的时候,因为只加载需要的数据,这样就可以降低数据库以及内存压力。
    虽然说有时候整体的数据量并不多,但是这是一种机制,当数据量比较大的时候,对整体项目或者
    方法调用的优化就会有明显的效果。

三、hibernate中get方法和load方法区别?
    1、hibernate中,对于get方法,是立即加载的,也就是会立刻从数据库中查询出数据,有数据就直接返回这个
    数据,如果没有对应的数据就会返回null;
    而hibernate对于load方法,并不是立即去加载的,hibernate会认为要查询的数据一定存在,所以会通过CGLIB生成一个代理对象,
    当在使用到该对象的属性的时候才会去查询数据库,但是此时如果数据库中不存在该对象,就会抛出异常:
    ERROR LazyInitializer:63 - Exception initializing proxy(还有一种情况会出现此异常:当session关闭之后再调用该对象中的属性   时, 一般这种情况发生在view层调用该对象的属性,因为此时session已经是关闭的了的)。
    所以在使用load方法抛出异常并不是因为创建对象引起的,而是因为
    调用了该对象中的属性引起的。
    2、查询时涉及缓存:
      对于get方法,hibernate会先查询一级缓存session,然后查询二级缓存,如果还没有的话就会去查询数据库,如果数据库
      中还有就返回null;
      对于load方法,hibernate会先查询一级缓存session,没有的话,就会创建代理对象,当使用实际数据时才会去查询二级
      缓存和数据库。

四、解决延迟初始化错误的方法:
    产生错误的原因:
      延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,
      那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。
      如果在游离状态时才初始化它,就会产生延迟初始化错误。
解决方法:
  1、不去将延迟加载对象进行初始化。
      如果是一个对象中的属性可以将其忽略初始化:
      配置:在该属性的set方法上添加注解:@JSON(serialize=false)
  2、将延迟加载的属性在配置中配置为立即加载:lazy=false,lazy属性默认是true;
  3、在业务层session关闭之前,对延迟对象初始化。
  4、OpeanSessionView配置 :OpenSessionInViewFilter,可将session开启到表现层。
配置如下:
    

<!-- OpenSessionInViewFilter必须配置在Struts2 Filter之前  -->
    <filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>