分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。

发布于 2022-09-11 22:54:08 字数 1118 浏览 29 评论 0

问题描述

程序在修改同一个数据表中多个数据时报错,事务自动回滚没有修改任何数据,具体报错信息如下,求问这个问题的出现原因以及解决方案。

问题补充

  1. 使用相同的数据重新执行发现每次只操作一条数据时正常运行,同时操作多条数据时出现异常。

错误日志

### Error updating database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。
### The error may involve com.nim.finance.mapper.GoldenTaxInvoiceMapper.updateByPrimaryKeySelective-Inline
### The error occurred while setting parameters
### SQL: update **** SET ** = ?,** = ? where gti_id = ?
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。
; uncategorized SQLException for SQL []; SQL state [S0001]; error code [8525]; 分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。] with root cause

com.microsoft.sqlserver.jdbc.SQLServerException: 分布式事务已完成。请将此会话登记到新事务或 NULL 事务中。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258) ~[mssql-jdbc-6.2.2.jre8.jar!/:na]
………………

环境

springBoot,sqlServer

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

究竟谁懂我的在乎 2022-09-18 22:54:08

问题已经解决了。
原因是这样的,此问题相关有两个方法,【方法A】接收并批量处理多组数据,【方法B】接受【方法A】的调用接收单组数据,每次只吃会同时操作多个数据表。
要求当其中某组数据出现异常时后续的多组数据要正常处理,例如当程序批量处理5组数据,其中第2,4组出现异常第1,3,5组的数据应该正常保存。
所以我对【方法B】添加@Transactional(propagation=Propagation.REQUIRES_NEW)注解使用单独的事务处理,并且【方法A】上也有相同的注解,最终导致在程序在处理多组数据时出现事务异常。
解决方案,把【方法A】的注解改为@Transactional使用已有的事务,【方法B】不做任何调整。

可可 2022-09-18 22:54:08
### The error may involve com.nim.finance.mapper.GoldenTaxInvoiceMapper.updateByPrimaryKeySelective-Inline
### The error occurred while setting parameters
### SQL: update **** SET ** = ?,** = ? where gti_id = ?

不是提示了,设置参数出问题了么

秋叶绚丽 2022-09-18 22:54:08

没用过 SQL Server,根据错误信息可以得知,是这个数据库操作没有被安排到事务当中。根据你的描述,如果只操作一条数据就没事,操作第二条数据就失败,可见最大的可能是,第一条数据操作完毕后,事务就提交了。至于为什么会这样,建议楼主再去研读下代码。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文