为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2019-12-11 14:09:25
问题描述程序在修改同一个数据表中多个数据时报错,事务自动回滚没有修改任何数据,具体报错信息如下,求问这个问题的出现原因以及解决方案。问题补充使用相同的数据重新执行发现每次只操作一条数据时正常运行,同时操作多条数据时出现异常。错误日志###Errorupdatingdatabase.Cause:com.microsoft.sqlserver.jdbc.SQLServerException:分布式事务已完成。请将此会话登记到新事务或NULL事务中。###Theerrormayinvolvecom.nim.finance.mapper.GoldenTaxInvoiceMapper.updateByPrimaryKeySelective-Inline###Theerroroccurredwhilesettingparameters###SQL:update****SET**=?,**=?wheregti_id=?###Cause:com.microsoft.sqlserver.jdbc.SQLServerException:分布式事务已完成。请将此会话登记到新事务或NULL事务中。;uncategorizedSQLExceptionforSQL[];SQLstate[S0001];errorcode[8525];分布式事务已完成。请将此会话登记到新事务或NULL事务中。;nestedexceptioniscom.microsoft.sqlserver.jdbc.SQLServerException:分布式事务已完成。请将此会话登记到新事务或NULL事务中。]withrootcausecom.microsoft.sqlserver.jdbc.SQLServerException:分布式事务已完成。请将此会话登记到新事务或NULL事务中。atcom.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)~[mssql-jdbc-6.2.2.jre8.jar!/:na]………………环境springBoot,sqlServer
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-12-12
?
湖上湖

TA贡献2003条经验 获得超2个赞

###Theerrormayinvolvecom.nim.finance.mapper.GoldenTaxInvoiceMapper.updateByPrimaryKeySelective-Inline

###Theerroroccurredwhilesettingparameters###SQL:update****SET**=?,**=?wheregti_id=?不是提示了,设置参数出问题了么


查看完整回答
反对 回复 2019-12-12
  • 2 回答
  • 0 关注
  • 749 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号