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

