最近有个项目因为命名策略的原因导致数据库表的不符合标准,所以看了下源码,废话不多说上代码!
现有的命名策略
- jpa现有的命名策略设置:hibernate.implicit_naming_strategy(隐式),hibernate.physical_naming_strategy(物理显示)
- implicit_naming_strategy 有5个策略:实现ImplicitNamingStrategy接口,其中SpringImplicitNamingStrategy策略是实现了ImplicitNamingStrategyJpaCompliantImpl只是重写了关联表的表名方法
- physical_naming_strategy 有2个策略:实现PhysicalNamingStrategy接口,
分别是PhysicalNamingStrategyStandardImpl、SpringPhysicalNamingStrategy。其中SpringPhysicalNamingStrategy 会将所有的大写都转成小写并加"_".
项目大概
使用SpringBoot2.4.2,mysql5.7
项目目录: 我这里因为项目需要用的是多数据源,隐式策略为默认,数据源1物理策略默认,数据源2物理策略为 SpringPhysicalNamingStrategy
数据源读取配置文件并注入
@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondDataSource(){
return DataSourceBuilder.create().build();
}
}
**主数据源**
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "primaryEntityManagerFactory", // 配置连接工厂 entityManagerFactory
transactionManagerRef = "primaryTransactionManager"