HibernateSessionFactory工厂中获得一个session,这个session默认情况下是单例模式吗
还是每次获得session都是不同的

解决方案 »

  1.   

    关注中,session这个类似于spring的beanfactory
      

  2.   

    ysl_228
    (ysl_228)
    等 级:
    结帖率:200.00%楼主结贴率:   结帖率:200.00%
      

  3.   

    session不是单例的,因为它需要是线程安全的
      

  4.   

    这问题没太注意过,不过分析下
     应该是单例模式的
       因为如果你用完session而不释放掉
         会报错的   建议你用Debug模式测试下  一目了然
      

  5.   

    不是,session是线程不安全,如果是单例的那会不安全的。
      

  6.   

    这个session 貌似和你的线程绑定的!你可以试下,如果同时使用此session工厂类获取session 这些session是相同的!
      

  7.   

    200%  太牛了
    还有就是都factory了,怎么可能还是单例呢。所以它是多个session。
      

  8.   

    Hibernate中的session是可以在hibernate.cfg.xml文件中配置如下:
    * 如果使用的是本地事务(jdbc事务)
    <property name="hibernate.current_session_context_class">thread</property>
    * 如果使用的是全局事务(jta事务)
    <property name="hibernate.current_session_context_class">jta</property>
    而获取session的方法也有两种:
    getCurrentSession()与openSession()
    getCurrentSession () 使用当前的session
    原理
    sessionFactory.getCurrentSession()可以完成一系列的工作,当调用时,
    hibernate将session绑定到当前线程,事务结束后,hibernate
    将session从当前线程中释放,并且关闭session。当再次调用getCurrentSession
    ()时,将得到一个新的session,并重新开始这一系列工作
    openSession() 重新建立一个新的session
    * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()
    创建的session则不会
    * 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession()
    创建的session必须手动关闭
      

  9.   

    是位于threadLocal里的单例模式,这样是最安全的,这样每个线程的访问都不会互相干扰了。