【发布时间】:2019-09-18 22:24:08
【问题描述】:
我在休眠 id 生成和 ms sql 服务器方面遇到了一些问题。
我在我的应用程序中使用GenerationType.SEQUENCE 来生成带有休眠的ID。
@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'
我有点困惑,它说“缺少 table”。使用 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
【问题讨论】:
-
是的,SQL Server 不支持。请参阅liquibase.org/documentation/changes/create_sequence.html的数据库支持表
-
是的,但已创建序列。之后我可以查询它。
Select NEXT VALUE FOR SEQUENCE_NAME也返回了一个新的 id。 -
嗯,也许你错误配置了 hibernate... 显示你的配置文件(默认为 application.properties/.yml)
-
我的意思不是整个文件,而是那些放置 JPA/Hibernate 属性的部分
-
我在上面的问题中添加了配置。
标签: sql-server hibernate spring-boot id-generation sequence-generators