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

Spring Hibernate如何修改表名解决PostgreSQL保留关键字建表报错

问题解决方法

问题根因

你已经定位到核心原因是USER是PostgreSQL的保留关键字,加了@Table后仍不生效,通常是JPA/Hibernate的命名策略配置问题、注解导入错误导致自定义表名没有生效。

具体解决步骤

  • 第一步:确认@Table注解导入正确
    Spring Boot 2.x版本导入:
    import javax.persistence.Table;
    
    Spring Boot 3.x版本导入:
    import jakarta.persistence.Table;
    
    不要导入其他框架的同名Table注解,否则自定义表名配置不会被JPA识别。
  • 第二步:配置Hibernate命名策略,避免自动修改自定义表名
    在application.properties/application.yml中添加以下配置,强制Hibernate使用你在@Table中指定的名称作为表名,不做自动转换:
    spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    
  • 第三步:(可选)强制引号包裹表名绕过保留字检查
    如果上述配置后仍然报错,可以修改@Table的name属性,用双引号包裹表名:
    @Table(name="\"USER_ACCOUNT\"")
    
    这样Hibernate生成建表语句时会自动给表名加双引号,PostgreSQL会将其作为普通标识符处理,不会识别为保留关键字。

常见疑问解答

是否需要修改实体类的类名?

不需要。实体类名和数据库表名没有强制绑定关系,只要@Table配置生效,实体类保留User名称完全不会影响运行。

为什么H2数据库不会报错?

H2对SQL保留字的限制远宽松于PostgreSQL,USER作为表名在H2中是合法的,而PostgreSQL的USER是内置关键字,必须用引号包裹或者更换表名才能作为表名使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:15:03