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

Spring Boot用JpaRepository.save()插入数据报syntax error at or near "user"如何解决

错误原因

user是PostgreSQL的内置保留关键字,你建表时通过双引号创建了大小写敏感的"User"表,但Hibernate默认生成INSERT SQL时不会自动给表名加双引号,生成的SQL语句直接使用了insert into user ...,触发保留关键字语法冲突,PostgreSQL返回的SQLState 42601就是语法错误的专属错误码。

修复方案

你可以根据实际场景选任意一种方案解决:

  • 方案1:单独给User实体类配置带双引号的表名
    直接在@Table注解的name属性里包裹转义后的双引号,适配已创建的public."User"表,无需修改数据库结构:
    @Entity
    @Table(name = "\"User\"")
    public class User {
        // 原有实体类字段、getter、setter逻辑保持不变
    }
    
  • 方案2:全局开启Hibernate标识符自动转义
    在项目配置文件中添加配置,让Hibernate生成所有SQL时自动给表名、字段名加双引号,无需单独修改实体类:
    如果你用application.properties:
    spring.jpa.properties.hibernate.globally_quoted_identifiers=true
    
    如果你用application.yml:
    spring:
      jpa:
        properties:
          hibernate:
            globally_quoted_identifiers: true
    
  • 方案3:修改表名避开保留关键字(长期维护最推荐)
    将PostgreSQL中的表名修改为非保留关键字,比如sys_user、user_info,同步修改实体类的表名映射即可,从根源避免后续再次出现关键字冲突问题:
    @Entity
    @Table(name = "sys_user")
    public class User {
        // 原有实体类逻辑保持不变
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:04