我正在尝试使用 JPA 中的 spring.jpa.hibernate.ddl-auto = update
更新数据库。但它失败了,因为架构名称包含连字符。
我正在使用以下 JPA 配置:
spring.jpa.database=MYSQL
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
使用不带连字符的名称一切正常。但是,使用连字符时,我收到以下错误:
2019-03-06 17:48:14.767 INFO 17296 --- [gine[Catalina]]] org.hibernate.Version : HHH000412: Hibernate Core {5.2.17.Final}
2019-03-06 17:48:14.770 INFO 17296 --- [gine[Catalina]]] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-03-06 17:48:14.852 INFO 17296 --- [gine[Catalina]]] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2019-03-06 17:48:15.163 INFO 17296 --- [gine[Catalina]]] com.zaxxer.hikari.HikariDataSource : HikariPool-3 - Starting...
2019-03-06 17:48:15.578 INFO 17296 --- [gine[Catalina]]] com.zaxxer.hikari.HikariDataSource : HikariPool-3 - Start completed.
2019-03-06 17:48:15.604 INFO 17296 --- [gine[Catalina]]] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Hibernate: alter table table-xxx.tablex add column column col_name_x varchar(255)
2019-03-06 17:48:16.857 WARN 17296 --- [gine[Catalina]]] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:580) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.migrateTable(AbstractSchemaMigrator.java:297) [hibernate-core-5.2.17.Final.jar:5.2.17.Final]
...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-xxx.tablex add column col_name_x varchar(255)' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_92]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_92]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_92]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_92]
最佳答案
在 application.properties
中添加以下行解决了问题:
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
最初,我认为 spring.jpa.hibernate.naming-strategy 足以处理表和模式名称,但这还不够。还有physical-strategy
.
关于mysql - Spring JPA 无法更新名称包含连字符的 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55032086/