0

我使用具有生成 ID 的实体(因此 Entity 有一个字段,由@Idand标记@GeneratedValue)。我将在业务逻辑中使用生成的实体 id,我有一个问题:

如果我删除一个实体,它的 ID 是否会被重新使用?即新生成的 ID 只能比之前生成的更大?

4

1 回答 1

5

您不需要重复使用 ID,也不需要浪费时间担心这一点。(这是一个初学者的数据库问题。)

一般来说,重用 ID 在技术上是可能的——虽然不方便——但它需要锁定整个表,因此对于并发/多用户使用来说效率极低。

此外,恢复的 ID 不会是一个连续的范围......因此表示效率低下。

没有严肃的数据库系统实现这样的方案。


所以,不用担心恢复。只需确保您分配的密钥类型(整数或长整数)有足够的容量(整数为 20 亿,长整数/大整数为 2^63),足以在最大的合理交易量下使用 200 多年。

例如,当前每天有 10,000 条记录:

  • 每年 365 万
  • 业务增长的 20 倍 = 每年 7300 万
  • 乘以 200 年 = 146 亿

这只有约 34 位——对于“int”来说太大了,但使用长(63 位正数)它可以为您提供 2^29(约 5 亿)倍的备用容量。

然后,您可以告诉您的老板不需要恢复密钥,并且可以自信地预测系统在未来 1000 亿年的任何时候都不会用完密钥。

于 2013-08-03T09:53:46.313 回答