【问题标题】:Are two @Transactional executed in ONE(the same) hibernate session?两个@Transactional 是否在一个(相同的)休眠会话中执行?
【发布时间】:2014-06-13 20:51:10
【问题描述】:

我有两个方法,它们都是注解的@Transactional。

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

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

spring 事务管理器会一直保持会话直到 http 请求结束吗?

我知道事务管理器可能会在它的 aop 代理中做这样的事情:

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

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

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    spring 事务管理器会一直保持会话直到 http 请求结束吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2018-09-14
      • 2014-01-03
      • 1970-01-01
      相关资源
      最近更新 更多