您有三种选择:
(推荐)
您可以定义orm.xml。使用它,可以覆盖实体的表名。
对于您的情况,您只希望它用于指定的配置文件。为此,您需要创建
LocalContainerEntityManagerFactoryBean
. (而不仅仅是设置属性)(
Example here
在…上
LocalContainerEntityManagerFactoryBean
例如:
@Bean
@Profile("QA")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setDataSource(dataSource);
bean.setJpaVendorAdapter(jpaVendorAdapter);
bean.setPackagesToScan("com.example.demo");
bean.setMappingResources("orm.xml");
return bean;
}
此配置应仅应用于所需的配置文件。
下面是orm.xml的一个简单示例
<entity-mappings version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm
http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">
<entity class="com.example.demo.EntityName">
<table name="NEW_TABLE_NAME"></table>
</entity>
*感谢@BillFrost指出这一点。
@每个环境的EntityScan
@EntityScan
每个环境配置。因此,只扫描QAConfiguration中的QA实体。这要求您使用@Table中定义的不同名称创建重复的实体。
我真的不喜欢这样,因为这会导致您必须维护实体的QA集和生产集。
覆盖SpringPhysicalNamingStrategy
@Bean
public SpringPhysicalNamingStrategy springPhysicalNamingStrategy() {
return new SpringPhysicalNamingStrategy() {
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
// Just change find and replace your table name
return super.toPhysicalTableName(new Identifier( name.getText(), false), jdbcEnvironment);
}
};
}
**另外:只需检查如何构造
Identifier