sql-server - 模式验证 : missing table [SEQUENCE_NAME] when using Hibernate Sequence Generator Strategy

标签 sql-server hibernate spring-boot id-generation sequence-generators

我在使用 hibernate id 生成和 ms sql server 时遇到了一些问题。

我在我的应用程序中使用 GenerationType.SEQUENCE 通过 hibernate 生成 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'

我有点困惑,它说“缺少”。使用甲骨文它工作正常。 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

最佳答案

我在配置中使用了错误的方言。 正确的是:

spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.SQLServer2012Dialect

另一种适用于不支持序列的旧服务器。

关于sql-server - 模式验证 : missing table [SEQUENCE_NAME] when using Hibernate Sequence Generator Strategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55917851/

相关文章:

spring-boot - 如何以编程方式从 spring-boot-actuator 获取指标?

spring-boot - Kotlin : unit test with mock injection (mockK)

java - 在 Spring 中向客户端发送字段元数据

sql - 更新标识列中的值

sql - 如何在 SQL Server 中随时间插入纬度/经度?

sql - 使用 sqlserver 仅选择较新的日期

spring-boot - 在 Controller 中传递服务的功能,以便不复制 try catch block

asp.net - 从 SQL 切换到独立的 Redis

java - 关键字 'table' 附近的语法不正确,无法提取结果集

java - Spring + hibernate : a different object with the same identifier value was already associated with the session