Мы хотели бы выполнить двойную настройку, при которой наше приложение записывает данные в таблицу, имя таблицы которой представляет собой композицию из настроенного JPA имени таблицы и произвольного аффикса.
Наше приложение используетSpring Boot с Spring ORM при поддержке Hibernate.
Суффикс должен быть легко настраиваемым, в идеале с помощью внешней конфигурации Spring Boot.
Ниже приведена наша реализация SpringPhysicalNamingStrategy, которая добавляет суффикс к имени таблицы.Суффикс в настоящее время жестко закодирован.
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import org.springframework.stereotype.Component;
import java.util.HashSet;
import java.util.Set;
import static java.util.Arrays.asList;
@Component
public class DoubleRunPhysicalNamingStrategy extends SpringPhysicalNamingStrategy implements PhysicalNamingStrategy {
private Set<String> tableNames = new HashSet<>(asList("AR", "AP"));
private String suffix = "_2";
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
Identifier identifier =
super.toPhysicalTableName(name, jdbcEnvironment);
if (tableNames.contains(identifier.getText().toUpperCase())) {
return new Identifier(String.format("%s%s", identifier.getText(), suffix), identifier.isQuoted());
}
return identifier;
}
}
Наконец, вышеуказанная физическая стратегия именования настраивается с помощью следующего свойства приложения: spring.jpa.hibernate.naming.physical-Strategy = DoubleRunPhysicalNamingStrategy
Мы пытались использовать@Value и другой компонент через @Autowired, чтобы сделать суффикс настраиваемым, но без везения.Оба не подключены и остаются неназначенными.
Любой совет, как этого добиться?