问题描述程序在修改同一个数据表中多个数据时报错,事务自动回滚没有修改任何数据,具体报错信息如下,求问这个问题的出现原因以及解决方案。问题补充使用相同的数据重新执行发现每次只操作一条数据时正常运行,同时操作多条数据时出现异常。错误日志###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】不做任何调整。

湖上湖
TA贡献2003条经验 获得超2个赞
###Theerrormayinvolvecom.nim.finance.mapper.GoldenTaxInvoiceMapper.updateByPrimaryKeySelective-Inline
###Theerroroccurredwhilesettingparameters###SQL:update****SET**=?,**=?wheregti_id=?不是提示了,设置参数出问题了么
添加回答
举报
0/150
提交
取消