Spring Hibernate如何修改表名解决PostgreSQL保留关键字建表报错
问题解决方法
问题根因
你已经定位到核心原因是USER是PostgreSQL的保留关键字,加了@Table后仍不生效,通常是JPA/Hibernate的命名策略配置问题、注解导入错误导致自定义表名没有生效。
具体解决步骤
- 第一步:确认
@Table注解导入正确
Spring Boot 2.x版本导入:
Spring Boot 3.x版本导入:import javax.persistence.Table;
不要导入其他框架的同名Table注解,否则自定义表名配置不会被JPA识别。import jakarta.persistence.Table; - 第二步:配置Hibernate命名策略,避免自动修改自定义表名
在application.properties/application.yml中添加以下配置,强制Hibernate使用你在@Table中指定的名称作为表名,不做自动转换:spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl - 第三步:(可选)强制引号包裹表名绕过保留字检查
如果上述配置后仍然报错,可以修改@Table的name属性,用双引号包裹表名:
这样Hibernate生成建表语句时会自动给表名加双引号,PostgreSQL会将其作为普通标识符处理,不会识别为保留关键字。@Table(name="\"USER_ACCOUNT\"")
常见疑问解答
是否需要修改实体类的类名?
不需要。实体类名和数据库表名没有强制绑定关系,只要@Table配置生效,实体类保留User名称完全不会影响运行。
为什么H2数据库不会报错?
H2对SQL保留字的限制远宽松于PostgreSQL,USER作为表名在H2中是合法的,而PostgreSQL的USER是内置关键字,必须用引号包裹或者更换表名才能作为表名使用。
内容的提问来源于stack exchange,提问作者Bramanta
相关产品推荐
相关产品推荐

