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

Hibernate未按默认命名策略映射驼峰字段为下划线列名问题

问题根因

你手动声明LocalContainerEntityManagerFactoryBean自定义JPA配置时,Spring Boot自动装配默认带的命名策略不会自动注入。当前配置里没有显式指定Hibernate的物理/隐式命名策略,Hibernate会退回原生默认策略,直接用实体字段原名作为列名,自然不会执行驼峰转下划线的映射。
你代码里虽然导入了SpringPhysicalNamingStrategy类,但根本没有把它配置到Hibernate的生效属性中。
另外你当前配置里的sai.jpa.hibernate.ddl-auto=none是无效配置——你自定义的EntityManager读取的是sai.datasource.jpa前缀下的参数,不是sai.jpa前缀,这条配置根本不会被加载。

修复方法

只要把Spring提供的命名策略配置到JPA属性中即可,两种方式二选一:

方法1:代码中直接配置

修改返回JPA属性的properties()方法,直接把命名策略参数写入Map:

@Bean("jpaPropertyMap")
@ConfigurationProperties(prefix = "sai.datasource.jpa")
@NonNull
public Map<String, String> properties() {
    Map<String, String> jpaProps = new HashMap<>();
    // 配置驼峰转下划线的命名策略
    jpaProps.put("hibernate.physical_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");
    jpaProps.put("hibernate.implicit_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");
    return jpaProps;
}

方法2:配置文件注入

因为你给properties()方法加了@ConfigurationProperties(prefix = "sai.datasource.jpa")注解,可以直接在application.properties里加配置,参数会自动绑定到属性Map中:

# 修正原配置里前缀写错的ddl-auto
sai.datasource.jpa.hibernate.ddl-auto=none
# 新增命名策略配置
sai.datasource.jpa.hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
sai.datasource.jpa.hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
补充说明

只要你手动定义了LocalContainerEntityManagerFactoryBean,Spring Boot JPA的默认自动配置就会失效,所有默认JPA参数都需要手动显式配置,不会自动继承Spring Boot的默认值。
SpringPhysicalNamingStrategy就是Spring Boot默认的驼峰转下划线策略,配置后不仅字段名,表名也会自动按驼峰转下划线规则映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:42:17