изменение имени схемы объекта до инициализации sessionFactory

1

Во время перехода из спящего режима 3 версии в 4 версии я столкнулся с проблемой. Я использую spring и hibernate в своем проекте, и во время запуска моего приложения иногда я хочу изменить схему моих классов объектов. С 3-х версией hibernate и spring я делаю это, переопределяя метод postProcessConfiguration в классе LocalSessionFactortBean следующим образом:

@SuppressWarnings("unchecked")
    @Override
    protected void postProcessAnnotationConfiguration(AnnotationConfiguration config)
    {
        Iterator<Table> it = config.getTableMappings();
        while (it.hasNext())
        {
            Table table = it.next();
            table.setSchema(schemaConfigurator.getSchemaName(table.getSchema()));
        }
    }

эта работа идеально подходит для меня. Но в классе hibernate4.LocalSessionFactoryBean все методы почтового процесса были удалены. Некоторые люди предлагают использовать класс ServiceRegistryBuilder, но я хочу использовать конфигурацию Spring xml для моей фабрики сеансов и с классом ServiceRegistryBuilder Я не знаю, как это сделать. Может быть, кто-то предложит любое решение моей проблемы.

Теги:
spring
hibernate

1 ответ

2
Лучший ответ

Посмотрите на исходный код, чтобы найти решение. Класс LocalSessionFactoryBean имеет метод, называемый buildSessionFactory (newSessionFactory в предыдущей версии). С предыдущей версией Hibernate (3 версии) некоторые операции, обрабатываемые до вызова этого метода. Вы можете видеть их в официальных документах

        // Tell Hibernate to eagerly compile the mappings that we registered,
        // for availability of the mapping information in further processing.
        postProcessMappings(config);
        config.buildMappings();

как я понимаю (возможно, я ошибаюсь) этот метод buildMapping анализирует все классы, которые указаны как сопоставленные классы или помещены в packagesToScan и создает представление в таблице всех этих классов. После этого postProcessConfiguration метод postProcessConfiguration.

С версией Hibernate 4 у нас нет таких методов postProcess. Но мы можем переопределить метод buildSessionFactory следующим образом:

@Override
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {
    sfb.buildMappings();
    // For my task we need this
    Iterator<Table> iterator = getConfiguration().getTableMappings();
    while (iterator.hasNext()){
        Table table = iterator.next();
        if(table.getSchema() != null && !table.getSchema().isEmpty()){
            table.setSchema(schemaConfigurator.getSchemaName(table.getSchema()));
        }
    }
    return super.buildSessionFactory(sfb);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню