我在Spring配置文件中对hibernate操作类中的sessionFactory进行了注入操作<bean id="queryServices" class="com.xiaoair.ws.QueryServices">
  <property name="sessionFactory" ref="sessionFactory"></property>
</bean>在hibernate操作类中 Session session = sessionFactory.openSession();
session.beginTransaction();
List userlist = session.createQuery("from User").list();
session.getTransaction().commit();请问Spring会自动的进行关闭sessionFactory之类的操作吗?我好几个查询方法都是这么写的,把这些方法用XFire发布成webservice,过一段时间就请求不到,然后我重启下tomcat就一切正常了,请求还挺快,^_^。请问各位大侠,过一段时间就请求不到是什么原因?和sessionfactory没有释放有关吗?怎么看视频的时候说Spring会自动管理啊什么的?

解决方案 »

  1.   

    session需要关闭,spring自动管理需要配置一个session事物
      

  2.   

    不用关闭的吧,一般不是都把SessionFactory写成单例吗
      

  3.   

    你既然已经配置了spring,在业务层直接注入 就行了呗,但还是要关闭的
      

  4.   

    我这边是Session session = sessionFactory.openSession();
    session.beginTransaction();
    List list = session.createQuery("from User").list();
    session.getTransaction().commit();也就是说后面需要加上session.close()代码么?
      

  5.   

    我在hibernate业务操作类里面定义了private SessionFactory sessionFactory = null;然后再写数据库查询的时候是这样写的Session session = sessionFactory.openSession();
    session.beginTransaction();
    List list = session.createQuery("from User").list();
    session.getTransaction().commit();session是想在查询方法被调用的时候现场开一个,可以肯定sessionFactory是Spring管理的不需要释放之类的操作,但是通过sessionFactory打开的session就不知道了,那个session没有通过Spring注入,也就是说Spring不管,要我手动写个方法关闭了吗?
      

  6.   

    你可以调用sessionFactory.getCurrentSession()开启sessionsessionFactory.getCurrentSession().createQuery("from User").list();事务你也可以交给spring管理, 你的dao层的查询所有信息的方法 就只要写这一句就可以还要来个return诶。。 
      

  7.   


    最好这样做,hibernate虽然强大,但是用不好就会出现意想不到的麻烦