- Spring Boot项目中在application.properties中添加如下
# 扫描到新的实体类会自动创建新的表或字段,**使用包实际所在的包名代替
spring.jpa.hibernate.naming.physical-strategy=**.UpperTableStrategy
spring.jpa.hibernate.ddl-auto=update
- 情景1:oracle数据库中表带下划线,而在实体类中则是在去掉下划线,并使用驼峰命名的实体类名
注意1:字段名及表名:在使用SpringPhysicalNamingStrategy后,jpa遇到 大写 加 _(下划线)
注意2:如果表名没有前缀也不需要定制字段,则可以不去继承SpringPhysicalNamingStrategy,直接配置spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.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 UpperTableStrategy extends SpringPhysicalNamingStrategy {
@Override
public Identifier toPhysicalTableName(Identifier name,
JdbcEnvironment jdbcEnvironment) {
// 数据库映射表名时:添加前缀SC_,实体类遇上大写,在大写字母前加上下划线
Identifier identifier = super.toPhysicalTableName(name, jdbcEnvironment);
return getIdentifier("SC_" + identifier.getText(), identifier.isQuoted(),
jdbcEnvironment);
}
}
- 情景2:不需要修改命名则可以直接使用
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
定制化可以参考如下类:
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
public class UpperTableStrategy extends PhysicalNamingStrategyStandardImpl {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
// 将表名全部转换成大写
String tableName = name.getText().toUpperCase();
return name.toIdentifier(tableName);
}
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
String colnumName = name.getText().toUpperCase();
return name.toIdentifier(colnumName);
}
}
情景二参考文章:Spring Boot Jpa 表名小写转大写
本文介绍了在Spring Boot项目中,使用Spring-boot-starter-data-jpa与Oracle数据库配合时,如何处理实体类的驼峰命名与数据库下划线命名的映射问题。通过配置`spring.jpa.hibernate.naming.physical-strategy`,可以选择使用SpringPhysicalNamingStrategy进行字段和表名转换,或者使用PhysicalNamingStrategyStandardImpl保持默认策略。对于特定场景,还可以自定义策略,如参考文章中提到的表名小写转大写的方法。

458

被折叠的 条评论
为什么被折叠?



