首先,我知道在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实体映射到它。
我无法弄清楚是什么原因引起的?这可以与用户仅需要验证架构所需的任何特定权限相关联吗?有没有一种使用任何数据库查询权限来检查它的方法?还是可以一起做其他事情?
我已经尽力了。请帮帮我。
答案 0 :(得分:0)
我通过在application.properties
中添加以下属性来解决了该问题
spring.jpa.properties.hibernate.hbm2ddl.jdbc_metadata_extraction_strategy=individually