在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使用声明式事务声明。