Spring Boot jpa 标识,新行的 id 向前跳了 10K

问题描述

我使用的是 Spring Boot JPA 2.1.18。
我所有的模型类都派生自这个基类:

@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) 
public abstract class DbEntity {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   protected Long id;

   ....
}

一切正常,但我遇到了一个奇怪的行为,用于数据库中的新行的 ID(我使用的是 sqlServer):

enter image description here

如您所见,id 突然向前跳了 10000,我不明白为什么(java 代码不可能保留 10000 id,因为我没有批处理)。有什么建议吗?

解决方法

这是因为 SQL Server 中有一个名为 IDENTITY_CACHE 的选项,看看微软的这个页面,它解释了更多

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql?view=sql-server-ver15

要禁用它,请在您的数据库下运行以下命令

USE DatabaseName
GO
ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF
GO

请注意,这可能会降低性能