请问session是否需要每次做数据库操作时都通过sessionFactory.openSession()来生成?
还是只要生成一次,以后都使用这个session就可以了?
另外请问hibernate对数据库的连接是在sessionFactory生成时还是session生成时作的?

解决方案 »

  1.   

    个人认为:数据库操作时都通过sessionFactory.openSession()来生成;对数据库操作完就关闭SESSION。这个就可以保证多线程并发。
    以为sessionFactory是重量级!通常是单粒模式!他通常要求有个数据源来实例化。所以个人认为sessionFactory生成时就进行数据库连接!!
      

  2.   

    session是线程不安全的,每次获取每次关闭。就相当于JDBC中的Connection。
    SessionFactory是线程安全的,一般一个系统中只有一个.
      

  3.   

    openSession执行一次,就相当于开启一个connection以前,一般的做法是在一个httpSession或者一个线程中,使用同一个connection
    所以如果每次都openSession,或者新建connection的话,会很浪费资源,当没有并发的时候就一个连接即可如果只用hibernate,通常是用自动生成的HibernateSessionFactory类中的getSession()方法来获取session,先到当前线程中寻找是否已经存在了session,存在就用之,否则再去调用openSession方法创建
      

  4.   

    openSession执行一次,就相当于开启一个connection 有时,你对数据库只执行一次操作(hql或其它),然后关闭session,就如同关闭conn一样;同样,如果你数据库要执行几次操作,那么就需要执行完这几次操作后,在最后再把它关闭!