mysql - Spring JPA 无法更新名称包含连字符的 MySQL 数据库

标签 mysql spring hibernate jpa

我正在尝试使用 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/

相关文章:

string - 将字符串转换为 Spring 资源的方法

java - 从表中获取包含像 rowspan 这样的行的子行

java - 如何使用 Spring MVC 从 API REST 获取对象

java - Hibernate 关系映射/加速批量插入

php - 在 Symfony 中访问数据库连接数据

java - 在 Java EE 中连接到 mySQL 数据库时出现 NullPointer 异常

php - MySQL 查询在比较 2 列时间戳时获取 future 7 天的结果

Mysql查询-如何包含 "filter"

java - Hibernate SQL 到 HQL

java - 从主表实体引用主数据实体的外键列数错误