当前位置: 首页 > 知识库问答 >
问题:

两个@Transactional是在同一个hibernate会话中执行的吗?

商经业
2023-03-14

我有两个方法,它们都被注释为@Transactional。

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

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

spring事务管理器将会话保持到http请求结束。

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

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

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

共有1个答案

姬乐
2023-03-14

spring事务管理器将会话保持到http请求结束。

不,不会的。事务管理器对超文本传输协议请求一无所知,它只知道事务的开始和结束(线程绑定)。事务一结束,会话就会被销毁和清理。

也就是说,除非您使用的是< code > OpenSessionInViewFilter (或拦截器),否则< code >会话将保持打开状态,直到请求得到处理。

 类似资料:
  • 问题内容: 我运行foo.com。我在foo.com中有两个不同的应用程序:一个是foo.com/bar,另一个是foo.com/example。我使用会话来跟踪有关用户登录的信息,但是如果用户从foo.com/bar转到foo.com/example,则foo.com/example会看到用户从foo.com/启动的会话并使用该信息。我的问题是,如何同时为每个目录进行两个不同的会话? 问题答案:

  • 我正在从事一个项目,其中我打算制作一个JavaGUI应用程序,该应用程序连接到ssh服务器并在服务器上执行远程命令。我愿意使用JSch库。我的目标是制作按钮和文本字段,让用户能够轻松发送命令和获得回复。我的意思是,用户不会打开xShell并提示“grep”hi“/usr/file.txt”,而是从列表中选择路径,在文本字段中输入“hi”,然后按下grep按钮。 问题是,我找不到一个在一个会话中执行

  • 我有几个类注释为@Transactional 例如,我有第一类,这是Spring旋转变压器 类 我有一个控制器类,也标注了@Transactional 问题是每次我访问testDao.load(Test.class,1)hibernate时都会向数据库发出查询,而不是拉Test。控制器中的缓存中的类id=1。 为什么它不使用缓存?这两个调用在每个请求中发生,但似乎在不同的会话中。 如果我在控制器中

  • 问题内容: 我有4种方法(,,和一类)。方法,并有方法。另外,我有4个线程,,和分别。 如果访问方法(同步方法),线程访问方法(同步方法)是否可以同时进行?如果不是,则t2的状态如何? 问题答案: 如果t1访问m1方法(同步方法),t2线程可以同时访问m2方法(同步方法)吗? 该关键字适用于 目标水平 ,且只有一个线程可持有对象的锁。因此,只要您在谈论同一个对象,那么 否 ,它将等待释放进入时获得

  • 问题内容: 这是大多数DAO中使用的典型设置: 我看到只有呼叫,否或。 因此,当我从不在会话中返回实体时,无法加载惰性集合。类似地,保存似乎总是同花顺! Spring 的注解本身就具有开启和关闭会话以及交易的魔力吗? 问题答案: 在Spring中,由划定的业务交易与hibernate之间存在一一对应的关系。 也就是说,当通过调用方法开始业务交易时,将创建hibernate会话(Transactio

  • 问题内容: 假设我有一个名为example的表格,如下所示: [abc] | [def] --1 — | -qwerty- --2 — | -asdf — 我想要做的是在一个SQL查询中更新两个列(仅使用一个UPDATE)。 以上是我要实现的内容,但是在一行sql中(使用MySQL)。我知道您可以这样做,但是我不确定如何使用两个不同的where语句来做到这一点。 问题答案: 您可以使用( mysq