SpringBoot用EntityManager持久化对象到MariaDB遇SQL语法错误求助
问题原因
interval是MariaDB的保留关键字,你的SQL语句中直接将它作为列名使用,导致数据库解析SQL时出现语法错误。从异常日志里的insert into cms_kpi_config (interval, last_updated)...可以明确看到这个问题。
解决方案
有两种可行的解决方式,任选其一即可:
方式一:在实体类中给列名添加反引号
修改实体类CmsKPIConfig中interval字段的@Column注解,给列名加上反引号,让Hibernate生成带反引号的SQL语句,数据库就会将其识别为普通列名:
@Column(name = "`interval`", nullable = false) @NotNull public String getInterval() { return interval; }
方式二:修改数据库列名(推荐长期方案)
如果可以修改表结构,建议将列名改为非保留字,比如kpi_interval,避免后续出现类似问题:
- 执行SQL修改表结构:
ALTER TABLE cms_kpi_config CHANGE COLUMN `interval` `kpi_interval` enum('5MIN','30MIN','60MIN') NOT NULL DEFAULT '5MIN';
- 同步修改实体类:
private String kpiInterval; @Column(name = "kpi_interval", nullable = false) @NotNull public String getKpiInterval() { return kpiInterval; } public void setKpiInterval(String kpiInterval) { this.kpiInterval = kpiInterval; }
验证
修改完成后,重新运行代码,EntityManager生成的SQL会正确处理列名,不会再出现语法错误。
内容的提问来源于stack exchange,提问作者manjosh
相关产品推荐
相关产品推荐

