理解没有错你的问题应该时 close session 问题。 
lazy 设置为true 时在 web.xml 中加上这样的设置。但代码也要做相应的修改, 避免空指针问题。<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
      org.springframework.orm.hibernate.support.OpenSessionInViewFilter
    </filter-class>
  </filter>

解决方案 »

  1.   

    多谢,基本上知道问题所在,可是我是刚开始接触这方面的内容,对其其中的机制还是不太明白
    现有问题请教:
    Lazy 设置对持久化类有什么影响,如果该类没有关系映射设置为什么会导致这个问题呢
    Thank you very much!
      

  2.   

    这个问题你还是查查资料比较好。比如我说个简单的例子,Event和Speaker是双向一对多。
    Session session ;
    Transaction tx = session.beginTraction();
    session.get(Event.class,1);   //加载 id 为 1 的对象
    tx.commit();
    session.close();由于event对象里面有set Speaker属性,
    所以你 lazy="false" 就表示加载event对象的时候把speakers也加载了。
    lazy="true" 表示加载event对象的时候并不加载speakers集合,当你在需要用到这个speakers集合的时候再
    加载。但是如果你用到这个集合的地方是在session关闭以后,那么它就会出问题,因为加载都是基于session的。
    而此时你的session已经关闭了。如果你在上面程序session.close()之前取speakers对象是不会有问题的。
      

  3.   

    > Lazy 设置对持久化类有什么影响,如果该类没有关系映射设置为什么会导致这个问题呢楼主给出的配置里,这个 lazy 就是用来说明这个持久化类本身是否延迟加载的,并不是用来说明它所包含的关联对象。如果这个 lazy 为 true(缺省情况就是这样),那么这个持久化对象一开始只有 id 是有效的,访问任何其它属性值都会触发一次数据库查询,把所有属性值填好。所以,正如楼上所说,如果你在 close session 之后才访问它的某个属性,就会发生错误了。对关系映射指定 lazy 特性,是在那个关系映射的标签里(比如 Set、List)里写。