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