(1)openSession从字面上来看就是打开一个新的session,但是在创建时autoCloseSessionEnabled属性为false,所以在事务结束时不会自动关闭,需要手动关闭,所以很可能会造成资源浪费
(2)currentSession创建session时autoCloseSessionEnabled,flushBeforeCompletionEnabled都为true,并且session会同sessionFactory组成一个map以sessionFactory为主键绑定到当前线程。
对于getCurrentSession 来说,有以下一些特点: 1.用途,界定事务边界 2.事务提交会自动close,不需要像openSession一样自己调用close方法关闭session 3.上下文配置(即在hibernate.cfg.xml)中,需要配置:
<property name="current_session_context_class">thread</property>
(需要注意,这里的current_session_context_class属性有几个属性值:jta 、 thread 常用 , custom、managed 少用 ) a).thread使用connection 单数据库连接管理事务 b).jta (java transaction api) Java 分布式事务管理 (多数据库访问),jta 由中间件提供(JBoss WebLogic 等, 但是tomcat 不支持)