У вас есть три варианта:
orm.xml (рекомендуется)
Вы можете определить orm.xml.С его помощью вы можете переопределить имя таблицы сущности.Обычно вы бы поместили файл orm.xml в папку resources / META-INF.Но тогда это будет применяться ко всем вашим профилям, так как Spring Boot загрузит его автоматически.
Для вашего случая вы хотите это только для указанного профиля.Для этого вам нужно создать LocalContainerEntityManagerFactoryBean
.(Вместо того, чтобы просто устанавливать свойства) ( Пример здесь )
На LocalContainerEntityManagerFactoryBean
вы можете затем указать местоположение для orm.xml.
Например:
@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
для конфигурации среды.Таким образом, сканируйте только объекты QA в конфигурации QAC.Для этого необходимо создать дубликаты сущностей с разными именами, определенными в @Table.
Мне действительно это не нравится, так как вам приходится поддерживать набор сущностей QA и производственный набор. Это просто производственная проблема, ожидающая возникновения.
Переопределение SpringPhysicalNamingStrategy
Наконец, вы можете расширить SpringPhysicalNamingStrategy, после чего вы можете изменить это имя конкретной таблицы.Этот компонент должен быть активным только в профиле QA.
@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
для требований к именованию вашей БД.