Spring / Hibernate @Transactional 如果随后进行第二个 @Transactional 调用,则不会刷新事务

2023-12-29

我的 Spring Boot 应用程序有一个奇怪的行为。

该应用程序有在视图中打开会话 to false.

我有一个控制器和一个服务,公开了 2 个带注释的方法@交易.

应用程序属性:

spring.jpa.open-in-view=false

我的服务:

@Service
public class MyService {
        @Transactional(transactionManager = "myTx")
        public void doA(Integer objectId) {
                Object o = repo.findMyObject(objectId);
                updateMyObject(o);
                repo.save(o);
        }

        @Transactional(transactionManager = "myTx")
        public void doB(Integer objectId) {
                Object o = repo.findMyObject(objectId);
                updateMyObjectDifferently(o);
                repo.save(o);
        }
}

我的控制器(案例1):

@RequestMapping("/do/{myId}")
    public String do(Model model, HttpServletRequest request) {

        service.doA(myId);
        service.doB(myId);

        return "page";
    }

在调试 SQL 时,我看到 SELECT 查询是在调用服务期间执行的。 但我看到仅 1 次冲洗(多次更新),当 service.doB() 完成并且该方法周围的 TransactionInterceptor 启动方法 invokeWithinTransaction 时就完成了,这很奇怪。

由于这两个方法都有@Transactional,我本来希望看到2同花:第一次刷新在 service.doA() 结束时进行,第二次刷新在 service.doB() 结束时进行。

更奇怪的是,如果我评论第二个电话,那么

我的控制器(案例2):

@RequestMapping("/do/{myId}")
    public String do(Model model, HttpServletRequest request) {

        service.doA(myId);
        //service.doB(myId);

        return "page";
    }

在情况 1 中,就像 service.doA() 知道第二个调用将在同一对象上到达,因此它不会提交/刷新事务并等待 service.doB() 结束。

为什么我只看到 1 个同花? 是因为这两个调用都是针对某个数据库对象吗?

我认为我对@Transactional 的了解还可以。 但现在,我迷路了。


Hibernate 将检测对象是否确实脏并避免发送UPDATE如果不需要的话声明一下。我假设你的updateMyObject只是不改变实体的状态(相对于实体加载时最初的状态)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring / Hibernate @Transactional 如果随后进行第二个 @Transactional 调用,则不会刷新事务 的相关文章

随机推荐

  • 如何在Delphis MessageDlg中忽略计时器事件

    我在 Delphi 中设置了一个全局异常处理程序 在某些严重的异常情况下 会显示一条错误消息 后跟 Halt 显示错误消息时 Delphi 正在处理消息队列 处理计时器事件 这会导致进一步的错误 我想要的是显示一个不处理计时器事件的错误对话
  • 在进行一些 python 分析后,Django(?)在处理大型数据集时速度非常慢

    我正在将我的旧 PHP 脚本与更新 更精美的 Django 版本和 PHP 脚本进行比较 完全脱离 HTML 并且所有功能都运行得更快 速度快得多 以至于 Django 肯定出了问题 首先 一些背景信息 我有一个页面可以输出销售数据报告 数
  • html5 如何将一个 SVG 变形或动画为另一个?

    我做了一些搜索 但我不得不承认 我对 SVG 没有任何经验 我见过很多现代库 例如 Raphael PaperJS KineticJS EaselJS 但我不知道什么适合这里的目标 也许甚至 CSS 关键帧也能做到这一点 对于这个问题的指出
  • 使用 Javascript 更改元素的 onfocus 处理程序?

    我有一个表单 其中的默认值描述了应该输入该字段的内容 替换标签 当用户聚焦某个字段时 将调用此函数 function clear input element element value element onfocus null onfocu
  • 在哪里可以找到要使用 LDAP 过滤器搜索的完整属性列表?

    作为我的问题的延伸here https stackoverflow com questions 24649579 searching directoryservices to return a list of modified users
  • Jersey 2 中的自定义 MOXyJsonProvider 不起作用?

    我正在阅读答案Moxy 忽略 json 中的无效字段 https stackoverflow com questions 27658173 moxy ignore invalid fields in json该方法与我想做的事情相匹配 所以
  • Wix Bundle源码路径和项目结构

    我正在尝试创建一个引导程序安装程序 它将安装我的应用程序以及运行我的应用程序所需的第三方应用程序 第三方应用程序是一个 exe 包 其中包含许多补充文件 我的问题是 如何将第三方应用程序包含到我的捆绑包中 我是否也必须添加所有补充文件 10
  • 使用nodejs和redis进行发布订阅(node_redis)

    我正在尝试使用 nodejs 和 node redis 构建一个通用的发布 订阅服务器 该服务器接收来自浏览器的带有通道名称的请求 并响应该通道已发布的任何数据 为此 我使用来自浏览器的长轮询请求 并通过在通道上收到消息时发送响应来处理这些
  • Java:int数组用非零元素初始化

    据 JLS 称 int初始化后数组应立即用零填充 然而 我面临的情况并非如此 这种行为首先出现在 JDK 7u4 中 并且也出现在所有后续更新中 我使用 64 位实现 下面的代码抛出异常 public static void main St
  • 在 C 中,const 变量是否保证在内存中不同?

    说到字符串文字 C99 标准规定 6 4 5 6 如果这些数组的元素具有适当的值 则未指定这些数组是否不同 如果程序尝试修改这样的数组 则行为是未定义的 我找不到类似的警告或对 const 变量的明确保证 可以表达一下 x y在上下文中co
  • 如何使用 C# 更好地查询 Active Directory 中的多个域?

    我正在尝试将 LDAP AD 搜索从仅搜索当前登录的域扩展到搜索 AD 中的所有域 该方法接受带有查询的字符串并返回 LDAPInformation 对象 当我问的时候 还有比这种方式更好的搜索名字的方法吗 由于按姓氏查找人员时需要使用通配
  • 在 Hive 中将多列中的列合并为一列

    有没有什么方法可以对 Apache Hive 中的explode 函数执行相反的操作 假设我有一张这种形式的表格id int description string url string 我想从这个表中创建一个看起来像这样的表id int j
  • 返回 R 中每对节点之间的相互节点列表

    我想获得图中每对节点之间相互连接的节点列表 library igraph G lt graph c 1 2 1 3 1 4 2 4 2 3 2 5 3 5 4 5 5 6 5 7 7 8 7 9 directed F plot G 边是无向
  • 找不到调试信息或与 Visual Studio 的不匹配

    我复制了一个现有项目并重命名了该文件夹 现在 当我尝试编译应用程序时出现此错误 调试信息找不到或不匹配 没有加载符号 您想继续调试吗 如果我单击 是 它就会编译并运行良好 但现在我必须处理这个消息 只是好奇我在项目属性中更改了什么以使其停止
  • 扩展 Highmaps 副作用

    我正在尝试创建佛罗里达州的点密度图 虽然我知道 Highmaps 不支持带有地图点的颜色轴 我扩展了它并且它有效 但它带来了副作用 当我单击图例中的某一类别时 不会发生隐藏 例如 如果我单击 gt 10 则所有大于 10 的值都不会隐藏 当
  • 在java中读取进程的实时输出

    我在我的 java 应用程序中启动了一个 python 脚本 Process p Runtime getRuntime exec python script py 该脚本循环运行 并且仅由事件 或用户交互 取消 该脚本在每个循环周期写入输出
  • Windows 7 上的 Glassfish 启动域失败

    我想在 Windows 7 上使用 JAVA 8 JDK 66 启动 Glassfish 4 1 1 Server 但我的命令 asadmin start domain 失败 这似乎是一个不起眼的错误 因为我在命令提示符中收到一条很长的失败
  • 为什么我的 Azure SQL 数据库表永久锁定?

    我有一个独立的 Azure SQL 测试数据库 除了通过 SSMS 的开发计算机和开发 Web 应用程序实例之外 没有任何活动连接 我是唯一一个使用这个数据库的人 我正在一个大约 1M 记录的表上运行一些测试 我们需要在其中执行大量操作UP
  • UIPinchGestureRecognizer 的触摸位置

    我想在我的 iPhone 应用程序中使用捏合手势实现缩放 问题是 在识别手势时调用的方法中 我无权访问触摸事件本身 所以我无法真正获取它们的locationInView 并且我想得到它以便正确地居中我的放大 In the UIPinchGe
  • Spring / Hibernate @Transactional 如果随后进行第二个 @Transactional 调用,则不会刷新事务

    我的 Spring Boot 应用程序有一个奇怪的行为 该应用程序有在视图中打开会话 to false 我有一个控制器和一个服务 公开了 2 个带注释的方法 交易 应用程序属性 spring jpa open in view false 我