SpringBoot2.6+PostgreSQL15+Hibernate5.7下@Column注解失效问题咨询
解决Spring Boot+Hibernate中@Column字段名配置不生效的问题
你的问题根源在于Spring Boot默认的Hibernate物理命名策略会自动将驼峰格式的字段名转换为下划线分隔的小写格式,即使显式通过@Column(name)指定了字段名也会被转换,导致验证时Hibernate查找的是is_enabled而非你配置的isEnabled。以下是具体解决方法:
配置标准物理命名策略
在Spring Boot配置文件中添加以下配置,让Hibernate完全遵循你在@Column中指定的字段名,不做自动转换:
对于application.properties:spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl对于application.yml:
spring: jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl核对数据库字段名的大小写规则
PostgreSQL的字段名大小写规则需要注意:- 如果数据库字段是通过双引号创建的(如
CREATE TABLE analytics ("isEnabled" BOOLEAN NOT NULL)),字段名会保留大小写,此时必须保证Hibernate使用的名称与之一致; - 如果创建表时未使用双引号,PostgreSQL会自动将字段名转为小写(即
is_enabled),这种情况下你也可以直接修改@Column(name = "is_enabled")来匹配数据库字段。
- 如果数据库字段是通过双引号创建的(如
验证修复效果
重启应用后,Hibernate的schema验证会使用你指定的isEnabled字段名匹配数据库,不会再抛出missing column [is_enabled]的错误。
内容的提问来源于stack exchange,提问作者Mehdi Mousavi
相关产品推荐
相关产品推荐

