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
相关产品推荐
相关产品推荐

