SpringBoot请假申请系统开发:leave表创建失败问题求助
leave表的问题 问题现象
使用SpringBoot开发请假申请系统时,执行DDL创建名为leave的表时报SQL语法错误,错误栈核心信息如下:
Error :
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table leave (id bigint not null auto_increment, end_date date, start_date date, status smallint, employee_id bigint, primary key (id)) engine=MyISAM" via JDBC Statement
...
Caused by: java.sql.SQLSyntaxErrorException: 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 'leave (id bigint not null auto_increment, end_date date, start_date date, status' at line 1
...
同时后续添加外键约束时也出现同类语法错误。
问题根源
leave是MySQL的保留关键字,直接将其用作表名时,MySQL的语法校验会判定SQL语句非法,从而抛出错误。
解决方案
方案1:修改表名(推荐)
将表名改为非保留字,比如leave_request、employee_leave等。在对应的实体类上通过@Table注解指定新表名:
@Entity @Table(name = "leave_request") public class Leave { // 实体类字段... }
方案2:保留原表名,添加标识符引号
如果必须使用leave作为表名,需要在注解中给表名加上MySQL的反引号(`),让Hibernate生成的DDL语句将表名作为标识符处理,避开保留字冲突:
@Entity @Table(name = "`leave`") public class Leave { // 实体类字段... }
此时Hibernate生成的DDL会变成create table leave (...),符合MySQL的语法规范,外键约束也能正常执行。
内容的提问来源于stack exchange,提问作者Vinayak

