public Student get(int id) {
Student q=(Student)getHibernateTemplate().load(Student.class, id);
Hibernate.initialize(q);
return q;
}我调用这个函数时出现错误:
ERROR LazyInitializationException:19 - could not initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:60)
at org.hibernate.Hibernate.initialize(Hibernate.java:306)
at com.fx.dao.StudentDaoHibernate.get(StudentDaoHibernate.java:54)
at com.fx.test.test.main(test.java:31)
Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:60)
at org.hibernate.Hibernate.initialize(Hibernate.java:306)
at com.fx.dao.StudentDaoHibernate.get(StudentDaoHibernate.java:54)
at com.fx.test.test.main(test.java:31)请哪位高手指点一下,谢谢了

解决方案 »

  1.   

    你把load()换成get()就可以
    load()支持延迟加载,get()不支持
      

  2.   

    还是在web.xml中配置一个filter吧
    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping> 
    这样就不会报错了噢,如果人把load改为get的话,那当你查询返回的值为list的时候同样又会报这个错误噢
    上面配置的filter是用来控制session自动开关的
      

  3.   

    还是在web.xml中配置一个filter吧
    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping> 
    这样就不会报错了噢,如果人把load改为get的话,那当你查询返回的值为list的时候同样又会报这个错误噢
    上面配置的filter是用来控制session自动开关的