1

我在我的应用程序中使用弹簧批处理。我有一个上传过程,其中数据从excel文件加载到数据库中。excel 在五个不同的表中加载了五个电子表格。如果上传成功则没有问题。但是当上传失败时,比如在第三张表中,我正在回滚整个上传。这会导致第一个表中的序列跳过数字。我该如何解决这个问题。我的序列加 1 并且没有缓存。

提前致谢

4

1 回答 1

0

要解决这个问题,您很可能必须改变您的期望。序列在事务中使用时通常不会回滚。例子:

  1. T1 使用序列 S 插入表 A 以生成 PK 值
  2. T2 使用序列 S 插入表 B 以生成 PK 值

现在你回滚 T1。T2 中的 PK 值会发生什么变化?他们应该重新编号吗?如果有人(比如 Java 程序)已经读取了 PK 值怎么办?

您可以看到,即使对于非常简单的情况,也不可能回滚序列。

一些数据库具有identity数据库服务器内部分配键的列的概念,但即使对于那些,您也会有差距。

如果您确实需要不间断的 PK 流,则必须使用自己的序列(或 Java 代码中的计数器)并自己维护/重置这个序列。

于 2013-07-15T14:24:11.410 回答