【发布时间】:2013-03-10 19:49:32
【问题描述】:
我使用Oracle序列作为表的主键,在Java应用程序中使用int映射这个主键,现在我发现我的客户已经达到了表中的最大int,甚至序列可以不断增加。但是Java int 不再能够存储它,我不想将Java代码从int更改为long,因为成本非常高。然后我发现客户数据库在 ID 列中有很多很大的空白。有什么办法可以重复使用这些丢失的身份证号码吗?
如果可以在数据库级别执行此操作,例如我可以重新组织此序列以将这些缺失的数字添加到其中,因此无需更改 Java 代码,那么我可以使用这些间隙。应该很棒。
我将编写一个函数来查找间隙范围,在有了这些数字之后,如果可以的话,我想将它们分配给序列值池,所以也许从现在开始,它不会使用自动递增,只需使用我分配的号码。在 Java 代码中,我可以继续使用 findNextNumber 来调用序列。但序列将能够返回我分配给它的值。这似乎是不可能的,对吧?有什么选择吗?
【问题讨论】:
-
更改 Java 部分会更容易,风险也更小。自动递增的主键不是为重复使用而设计的。
-
您真的要重新编号主表中的 ID 并更改所有从属表中的外键吗?将 int 扩展到 long 似乎更加一致。
-
我不想更改所有依赖表中的 PK 和外键,而只是拾取并重用间隙范围内的数字。查看我的新更新,谢谢
标签: java oracle architecture oracle11g sequence