两个@Transactional是在一个(相同的)休眠会话中执行的吗?

时间:2014-04-28 10:38:56

标签: java spring hibernate

我有两种方法,它们都是注释@Transactional。

我知道这两个方法将在两个不同的事务中执行。

但这两种方法是在一个hibernate会话中执行的吗?

spring transaction manager会保持会话开启直到http请求结束吗?

我知道事务管理器可以在它的aop代理中执行类似的操作:

 Session session=sessionFactory.openSession/getCurrentSession;
 Transaction tx=session.beginTransaction();
 ...
 tx.commit();

我找不到代码,如果我能在某处找到代码,我可以自己回答这个问题。

1 个答案:

答案 0 :(得分:2)

  

spring transaction manager会保持会话开启直到http请求结束吗?

不,不会。事务管理器对http请求一无所知,它只知道事务的开始和结束(这是线程绑定的)。交易结束后,Session将被销毁并清除。

除非您使用OpenSessionInViewFilter(或拦截器),否则Session将保持打开状态,直到处理完请求为止。