我在我的应用程序中使用spring批处理。我有一个上传过程,其中数据从excel文件加载到DB中。 excel有五个电子表格,加载在五个不同的表格中。如果上传成功则没问题。但是当上传失败时,比如在第3页中,我正在回滚整个上传。这会导致第一个表中的序列跳过数字。我该如何解决这个问题。我的序列加1并且有nocache。
先谢谢
答案 0 :(得分:0)
要解决此问题,您很可能必须改变您的期望。序列通常在事务中使用时不会回滚。例如:
现在你回滚T1。 T2中的PK值会发生什么变化?它们应该重新编号吗?如果有人(比如Java程序)已经读过PK值怎么办?
你可以看到,即使是非常简单的情况,也不可能回滚序列。
某些数据库具有identity
列的概念,其中DB服务器在内部分配密钥,但即使对于那些,也会有间隙。
如果你真的需要一个不间断的PK流,你将不得不使用自己的序列(或Java代码中的计数器)并自己维护/重置这个。