SpringPhysicalNamingStrategy с настраиваемым суффиксом - PullRequest
0 голосов
/ 02 апреля 2019

Мы хотели бы выполнить двойную настройку, при которой наше приложение записывает данные в таблицу, имя таблицы которой представляет собой композицию из настроенного 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, чтобы сделать суффикс настраиваемым, но без везения.Оба не подключены и остаются неназначенными.

Любой совет, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...