我在使用hibernate生成Id时,遇到了一些与微软SQL Server相关的问题。
在我的应用程序中,我使用GenerationType.SEQUENCE
来生成Ids。
@Id
@SequenceGenerator(name = "SequenceGenerator", sequenceName = "SEQUENCE_NAME")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SequenceGenerator")
private Long id;
作为数据库,我使用的是Microsoft SQL Server 2017。
我通过Liquibase创建序列:
<createSequence incrementBy="50" sequenceName="SEQUENCE_NAME" startValue="100000"/>
在启动Spring Boot应用程序时,我遇到了以下错误:
Schema-validation: missing table [SEQUENCE_NAME]
当我手动查询序列时,可以找到它:
SELECT COUNT(*) FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[SEQUENCE_NAME]') AND type = 'SO'
我有点困惑,它说“缺少表格”,在oracle中它工作正常。 MSSQL不支持通过序列生成ID吗。
我的配置:
spring:
datasource:
url: "jdbc:sqlserver://localhost:1433"
username: sa
password: ABc12345!
jpa:
properties:
hibernate.dialect: org.hibernate.dialect.SQLServerDialect
我使用这个Docker镜像:
mcr.microsoft.com/mssql/server:2017-CU12-ubuntu
Select NEXT VALUE FOR SEQUENCE_NAME
返回一个新的id。 - Leon