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

Spring Boot中用JPA更新MySQL日期字段加一年报错求助

解决方法

你的代码存在两个关键问题:

  • SQL语法错误:WHERE.id = 3多了一个多余的点,正确写法是WHERE t.id = 3
  • 你用的是JPQL查询(em.createQuery()),但DATE_ADD是MySQL原生函数,JPQL无法解析它,这是触发ParsingException的核心原因

针对这些问题,提供两种可行修复方案:

方案一:使用原生SQL查询(推荐,适配MySQL)

把createQuery()替换为createNativeQuery(),直接执行MySQL原生SQL,避开JPQL的语法限制:

String queryRecherche = "UPDATE myTable t SET t.dateDebut = DATE_ADD(t.dateDebut, INTERVAL 1 YEAR) WHERE t.id = 3";
Query query = em.createNativeQuery(queryRecherche);
query.executeUpdate();

方案二:使用JPQL兼容函数(跨数据库友好)

如果需要代码适配多种数据库,避免依赖MySQL特有函数,可以用以下两种方式:

方式1:通过FUNCTION调用MySQL原生函数

// 注意:JPQL中要使用实体类名称而非数据库表名,假设实体类名为MyEntity
String queryRecherche = "UPDATE MyEntity t SET t.dateDebut = FUNCTION('DATE_ADD', t.dateDebut, INTERVAL 1 YEAR) WHERE t.id = 3";
Query query = em.createQuery(queryRecherche);
query.executeUpdate();

方式2:使用JPQL标准DATEADD函数

String queryRecherche = "UPDATE MyEntity t SET t.dateDebut = DATEADD(YEAR, 1, t.dateDebut) WHERE t.id = 3";
Query query = em.createQuery(queryRecherche);
query.executeUpdate();

额外提醒:JPQL语句中引用的是实体类的类名和属性名,不是数据库表名和列名,请确保代码中的类名、属性名和实体类定义一致。

内容的提问来源于stack exchange,提问作者ayada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:50:23