3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理
在Hibernate中,管理Session
和transaction最好的方法是自动的"当前"Session
管理。请参见第 2.5 节 “上下文相关的(Contextual)Session”一节的讨论。使用"jta"
session上下文,假若在当前JTA事务中还没有HibernateSession
关联,第一次sessionFactory.getCurrentSession()
调用会启动一个Session,并关联到当前的JTA事务。在"jta"
上下文中调用getCurrentSession()
获得的Session
,会被设置为在transaction关闭的时候自动flush(清洗)、在transaction关闭之后自动关闭,每句语句之后主动释放JDBC连接。这就可以根据JTA事务的生命周期来管理与之关联的Session
,用户代码中就可以不再考虑这些管理。你的代码也可以通过UserTransaction
用编程方式使用JTA,或者(我们建议,为了便于移植代码)使用Hibernate的Transaction
API来设置transaction边界。如果你的代码运行在EJB容器中,建议对CMT使用声明式事务声明。