模式验证:使用休眠序列生成器策略时缺少表[SEQUENCE_NAME]

时间:2019-04-30 09:27:09

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

我在休眠ID生成和ms sql服务器方面遇到一些问题。

我正在应用程序中使用GenerationType.SEQUENCE来生成具有休眠状态的ID。

@Id
@SequenceGenerator(name = "SequenceGenerator", sequenceName = "SEQUENCE_NAME")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SequenceGenerator")
private Long id;

作为数据库,我使用Microsoft sql server2017。

我通过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

2 个答案:

答案 0 :(得分:0)

尝试将default_schema添加到a​​pplication.yml:

spring:
   jpa:
      properties:
         hibernate:
            default_schema: "dbo"

答案 1 :(得分:0)

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

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

另一个是针对不支持序列的旧服务器。