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
相关产品推荐
相关产品推荐

