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

SpringBoot JPA与兼容MySQL8的Aurora大小写敏感问题求助

解决Spring Boot JPA自动将大写表/列名转为小写的方案

不需要修改所有实体类的注解,通过自定义Hibernate的物理命名策略即可实现自动转小写,具体步骤如下:

1. 自定义物理命名策略类

创建一个继承自SpringPhysicalNamingStrategy的类,重写表名和列名的转换逻辑,将所有名称转为小写:

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;

public class LowerCasePhysicalNamingStrategy extends SpringPhysicalNamingStrategy {

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        // 将注解中定义的表名转为小写
        return Identifier.toIdentifier(name.getText().toLowerCase(), name.isQuoted());
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        // 将注解中定义的列名转为小写
        return Identifier.toIdentifier(name.getText().toLowerCase(), name.isQuoted());
    }
}

2. 配置Spring Boot使用自定义策略

在application.yml或application.properties中指定自定义的命名策略:

YAML格式:

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: com.yourcompany.yourproject.LowerCasePhysicalNamingStrategy

Properties格式:

spring.jpa.hibernate.naming.physical-strategy=com.yourcompany.yourproject.LowerCasePhysicalNamingStrategy

3. 验证效果

开启SQL日志查看生成的SQL语句,确认表名和列名已经自动转为小写:

spring:
  jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true

这样配置后,Hibernate在生成查询语句时会自动把@Table(name="TABLE_NAME")和@Column(name="COLUMN_NAME")中的大写名称转为小写,匹配数据库中的实际表/列名,无需修改任何实体类代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:02:10