我可以用pgAdmin清楚地看到公共方案中存在表“TEST”。
这是我的配置:
@Entity
@Table(name = "TEST", schema = "public")
public class TestEntity
application.yml:
spring:
jpa:
hibernate:
ddl-auto: validate
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
databasePlatform: org.hibernate.dialect.PostgreSQLDialect
例外:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [TEST]
at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:67)
当我将ddl-auto更改为'update'时,它会创建一个带有“test”名称的表,一切都会按预期开始工作。问题是我认为我的配置很好,它应该找到“TEST”。 有人可以帮忙吗?也许我需要使用更具体的方言?
答案 0 :(得分:2)
当然,原因在于命名策略。
@Table(name = "TEST")
,只有PhysicalNamingStrategy
可以更改它(ImplicitNamingStrategy
对面)。 SpringPhysicalNamingStrategy
将名称更改为小写,您可以从以下来源中看到:SpringPhysicalNamingStrategy.java。来自那里的代码片段:
protected Identifier getIdentifier(String name, boolean quoted,
JdbcEnvironment jdbcEnvironment) {
if (isCaseInsensitive(jdbcEnvironment)) {
name = name.toLowerCase(Locale.ROOT);
}
return new Identifier(name, quoted);
}
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
什么也没做。所以表格名称应该是您指定的TEST
。但是,看起来,您在spring-boot
配置中错误地指定了它。您应该仔细检查属性名称。
另外,只是为了测试,您可以尝试将application.properties
与
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
答案 1 :(得分:0)
不知道您的import os
import re
import csv
pattern = "^[A-Za-z]*[,]$"
file1 = open("10000DirtyNames.csv", "r")
print(re.match(pattern, file1))
if (re.match(pattern, file1)) != None:
print("Match")
else:
print("Does not match")
file1.close()
版本我想这可能是hibernate
功能,例如here。
在这种情况下,解决方案是将表名更改为小写
hibernate
到
@Table(name = "TEST", schema = "public")
建议here。
根据您的数据库,也可以通过使用转义双引号将其包装来创建大写表。
@Table(name = "test", schema = "public")
Latter至少与Postgres合作。