application.yml 中jpa配置
spring:
jpa:
database: MYSQL
show-sql: true
hibernate:
ddl-auto: update
naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
open-in-view: false
ddl-auto值说明
值 | 说明 |
---|---|
create | 每次运行该程序,没有表格会新建表格,表内有 数据会清空 |
create-drop | 每次程序 结束 的时候会清空表 |
update | 每次运行程序,没有表格会新建表格,表内有数据 不会清空,只会更新 |
validate | 运行程序会校验数据与数据库的字段类型 是否相同,不同会报错 |
问题描述
场景(jpa版本:2.0.4.RELEASE)
- 数据库名称含 " - ",例如: t-dev,user-table
- jpa的更新语句为
Hibernate: alter table t-dev.test add column c varchar(10) comment '测试'
- 数据库名称含 " _ ",例如: t_dev,user_table
- jpa的更新语句为
Hibernate: alter table t_dev.test add column c varchar(10) comment '测试'
运行结果
- 场景1启动会报错,内容如下:
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
...
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 '-dev.test add column c varchar(10) comment '测试'' at line 1
异常原因
- 是由于 数据库命名不规范 造成的错误
数据库命名规范之一:采用26字母和0-9的自然数(一般不使用)加上下划线‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开
版本说明
- 2.0.4.RELEASE
- 更新表时会携带数据库信息,例如:alter table t_dev.test…
- ps:中间缺省的版本没有测试
- 2.2.2.RELEASE版本及以后
- 更新表时不会携带数据库信息,例如:alter table test…
解决办法
- 重命名数据库名
- 无法重命名的,就新建一个库,然后同步结构和数据到新库
- 升级jpa的版本信息