SchemaManagementException:模式验证:即使表存在于数据库中,表[chk_groups]仍然丢失

时间:2019-11-14 14:25:01

标签: java database hibernate spring-boot spring-data-jpa

首先,我知道在stackoverflow上有很多与此相关的问题,但是没有一个可以解决我的问题。这就是为什么我要发布此内容。

在尝试连接到SQL Server数据库并尝试使用hibernate.hbm2ddl.auto字段的“ validate”值来验证现有的数据库结构时,我遇到一个非常奇怪的问题。但是我遇到了错误,

SchemaManagementException: Schema-validation: missing table [chk_groups]

下面是我的实体配置,

@Table(name="chk_groups")
public class GroupEntity {
}

@Entity
@Table(name="chk_members")
public class MemberEntity {
}

我正在如下所示的属性文件中使用正确的配置,

spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost\instanceName;databaseName=companyDB
spring.datasource.username=sa
spring.datasource.password=sa

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.hibernate.ddl-auto = validate

现在在MS sql服务器中,默认架构名称为“ dbo”,理想情况下,在验证数据库结构时应选择该名称。但是可以肯定的是,当我第一次丢失表错误时,我也尝试过手动配置它,如下所示。还是没有运气。

@Entity
@Table(name="chk_groups", schema="dbo")
public class GroupEntity {

@Entity
@Table(name="chk_members", schema="dbo")
public class MemberEntity {

我也尝试在属性下方设置

spring.jpa.properties.hibernate.default_schema= dbo

我什至尝试过

@Entity (name="chk_groups")
public class GroupEntity {
}

我100%确信数据库表存在,因为我可以使用旧的JDBC模板方式访问它,并且可以对它执行所有CRUD操作而没有任何错误。

当我尝试使用通过Spring Boot和数据JPA方法通过Java代码创建的实体来验证现有数据库结构时,就会出现问题。我不能使用update或create或其他任何方式,因为已经创建了数据库结构。我应该使用Java实体映射到它。

我无法弄清楚是什么原因引起的?这可以与用户仅需要验证架构所需的任何特定权限相关联吗?有没有一种使用任何数据库查询权限来检查它的方法?还是可以一起做其他事情?

我已经尽力了。请帮帮我。

1 个答案:

答案 0 :(得分:0)

我通过在application.properties中添加以下属性来解决了该问题

spring.jpa.properties.hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually