You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,避免后续出现类似问题:

  1. 执行SQL修改表结构:
ALTER TABLE cms_kpi_config CHANGE COLUMN `interval` `kpi_interval` enum('5MIN','30MIN','60MIN') NOT NULL DEFAULT '5MIN';
  1. 同步修改实体类:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:55:16