Spring Boot项目Hibernate隐式命名策略配置问题求助
Hibernate隐式命名策略配置问题解决方案
问题描述
开发Spring Boot项目时,配置Hibernate的Implicit Naming Strategy(隐式命名策略)遇到问题:当前程序使用物理命名策略,即使给实体、表、列添加了注解(如下代码),仍报错Unknown column 'c1_0.id_contact' in 'field list'。
实体代码:
@Entity @Table(name = "contacts") @Getter @Setter public class Contact { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "idContact") private Integer id; @Column(name = "nameContact") private String name; }
解决方案
问题根源是物理命名策略自动将注解中的驼峰列名(如idContact)转换为下划线分隔的id_contact,与数据库实际列名不匹配。需调整配置让注解指定的名称直接生效:
1. 修改Spring Boot配置文件
根据你使用的配置格式(properties或yml)添加以下配置:
application.properties
# 配置隐式命名策略为Spring实现 spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy # 使用标准物理命名策略,不做名称转换 spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
application.yml
spring: jpa: hibernate: naming: implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
2. 验证数据库列名
确保数据库中contacts表的列名确实是idContact和nameContact,而非下划线格式。若数据库列名是下划线,需对应修改注解的name属性,或调整物理命名策略,但根据你的需求,保留驼峰列名的话上述配置即可解决问题。
3. 命名策略说明
- 隐式命名策略:用于未添加
@Table/@Column注解时,自动生成表/列名称的规则。 - 物理命名策略:对最终生成的名称做转换(如驼峰转下划线),配置
PhysicalNamingStrategyStandardImpl会直接使用注解指定的名称,不做额外转换。
内容的提问来源于stack exchange,提问作者Sergio Herreros
相关产品推荐
相关产品推荐

