SchemaManagementException:架构验证:即使数据库中存在表,也缺少表 [chk_groups]

Web*_*oob 6 java database hibernate spring-data-jpa spring-boot

首先,我知道 stackoverflow 上有很多与此相关的问题,但没有一个能解决我的问题。这就是我发布此内容的原因。

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

SchemaManagementException: Schema-validation: missing table [chk_groups]
Run Code Online (Sandbox Code Playgroud)

以下是我的实体配置,

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

@Entity
@Table(name="chk_members")
public class MemberEntity {
}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

现在在 MS sql server 中,默认模式名称是“dbo”,理想情况下应该在验证数据库结构时选择它。但为了确定,当我第一次遇到丢失表错误时,我也尝试手动配置它,如下所示。还是没有运气。

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

@Entity
@Table(name="chk_members", schema="dbo")
public class MemberEntity {
Run Code Online (Sandbox Code Playgroud)

我也尝试设置以下属性,

spring.jpa.properties.hibernate.default_schema= dbo
Run Code Online (Sandbox Code Playgroud)

我什至尝试过,

@Entity (name="chk_groups")
public class GroupEntity {
}
Run Code Online (Sandbox Code Playgroud)

我 100% 确定 DB 表存在,因为我可以使用旧的 JDBC 模板方式访问它,并且可以对其执行所有 CRUD 操作,不会出现任何错误。

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

我无法弄清楚导致此问题的问题是什么?这是否与用户验证架构所需的任何特定权限有关?有没有办法使用任何数据库查询权限来检查它?或者它可以是其他东西吗?

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

Mar*_*ier 3

我通过添加以下属性解决了这个问题application.properties

spring.jpa.properties.hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually
Run Code Online (Sandbox Code Playgroud)