1.如何让session和本地线程进行绑定
为了获取同一个session对象,我们可以将session与本地线程绑定在一起,只要在hibernate.cfg.xm进行以下配置就行,此时我们就可以通过sessionFactory. getCurrentSession()方法获取绑定后的session对象了。
<property name=“hibernate.current_session_context_class">thread
</property>
2.session和本地线程绑定工作的原理
当一个线程(threadA)第一次调用 SessionFactory 对象的 getCurrentSession() 方法时, 该方法会创建一个新的 Session(sessionA) 对象, 把该对象与 threadA 绑定, 并将 sessionA 返回
当 threadA 再次调用 SessionFactory 对象的 getCurrentSession() 方法时, 该方法将返回 sessionA 对象
当 threadA 提交 sessionA 对象关联的事务时, Hibernate 会自动清理 sessionA 对象的缓存, 然后提交事务, 关闭 sessionA 对象. 当 threadA 撤销 sessionA 对象关联的事务时, 也会自动关闭 sessionA 对象
若 threadA 再次调用 SessionFactory 对象的 getCurrentSession() 方法时, 该方法会又创建一个新的 Session(sessionB) 对象, 把该对象与 threadB绑定, 并将 sessionB 返回