如果可以在数据库级别执行此操作,我可以重新组织此序列以向其添加这些缺失的数字,因此不会更改Java代码然后我可以使用这些间隙。它应该很棒。
我会写一个函数来找到差距范围,在得到这些数字之后,如果可以,我想将它们分配给序列值的池,所以也许从现在开始,它不会使用自动递增,只需使用我指定的号码。在Java代码中,我可以继续使用findNextNumber来调用序列。但序列将能够返回我分配给它的值。这似乎不可能,对吧?任何替代方案?
答案 0 :(得分:3)
您的意思是,序列是否会返回一个处于“间隙”范围内的值?我不这么认为,除非你出于某种原因放弃/重新创建它。我想你可以编写一些函数来找到表中的PK间隙,然后将这些间隙范围保存到另一个表中,并使用间隙表“滚动”自己的序列函数。十分难看。试图“恢复”这些差距只是听起来像是为了避免不可避免的绝望尝试 - 您的Java PK数据类型应该与DB数据类型一致。很久以前,我有一个同样的问题,一个VB应用程序有一个类键被定义为16位整数,并且序列超过32K,必须将变量更改为Long。我说,咬紧牙关,进行转换。现在有点痛,以后会为你节省很多痛苦。只是我的意见。
答案 1 :(得分:0)
我肯定会让更改能够使用更长的数字,但与此同时,您可能会管理,直到您可以通过使用生成负数的序列进行更改。 PK指数的维护会对性能产生影响,但它会以更快的速度增长,但