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

Spring Boot 3.2.4配置Hibernate下划线命名策略失效求助

解决Hibernate驼峰命名转数据库下划线列名失效问题

问题原因

你使用了自定义的EntityManagerFactory配置类(GeneralDBConfig),此时Spring Boot自动配置的JPA命名策略属性(spring.jpa.hibernate.naming.*)不会被自动注入到自定义的EntityManagerFactory中,必须手动在配置代码里指定命名策略参数。

解决方案

在GeneralDBConfig的generalEntityManagerFactory方法中,将命名策略配置添加到Hibernate属性Map里,替换掉原来注释的代码块:

修改后的代码片段

@Primary
@Bean(name = "generalEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean generalEntityManagerFactory(final EntityManagerFactoryBuilder builder,
                                                                          final @Qualifier("generalDB") DataSource dataSource,
                                                                          final @Value("${spring.datasource.general.hibernate.hbm2ddl.auto}") String hibernateHbm2dllAuto,
                                                                          final @Value("${spring.datasource.general.database-platform}") String databasePlatform) {
    Map<String, Object> props = new HashMap<>();
    // 添加命名策略配置
    props.put("hibernate.physical_naming_strategy", org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy.class.getName());
    props.put("hibernate.implicit_naming_strategy", org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy.class.getName());
    
    if (StringUtils.isNotBlank(hibernateHbm2dllAuto)) {
        props.put("hibernate.hbm2ddl.auto", hibernateHbm2dllAuto);
    }
    if (StringUtils.isNotBlank(databasePlatform)) {
        props.put("hibernate.dialect", databasePlatform);
    }

    return builder
            .dataSource(dataSource)
            .packages("com.swisscom.wholesale.portal.domain.general")
            .persistenceUnit("generalDB")
            .properties(props)
            .build();
}

补充说明

  • CamelCaseToUnderscoresNamingStrategy是Hibernate原生的驼峰转下划线策略,会将translationKey转换为translation_key。
  • 如果偏好Spring Boot提供的命名策略,可以替换为org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy,它在Hibernate原生策略基础上做了适配,行为基本一致。
  • 确保你的实体类(包括继承的AbstractProductEntity)被正确扫描到(packages("com.swisscom.wholesale.portal.domain.general")已经覆盖)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:16