2014-12-02 5 views
1

Хотелось бы запустить Configuration.generateSchemaUpdateScriptList(). Однако Hibernate настроен с использованием LocalContainerEntityManagerFactoryBean. Как мне добраться до объекта Configuration из экземпляра LocalContainerEntityManagerFactoryBean? Или есть лучший способ достичь этого?Весна/Спящий режим: как получить конфигурацию из LocalContainerEntityManagerFactoryBean

+0

Почему вам нужно запустить 'Configuration.generateSchemaUpdateScriptList()' ? –

+0

Очевидно, потому что я хочу получить идею Hibernate о том, как обновить схему, чтобы она соответствовала объектам, но делать с ней что-то еще, а не просто применять ее как есть. –

ответ

2

ОК это была двухдневная стена против головного марафона, но в конце концов я нашел решение, хотя оно несколько хакерское.

Я кулачок по Hibernate's Integrator, о котором почти не упоминается в документах. Более подробную информацию об этом можно найти в связанных проблемах Hibernate JIRA HHH-5562 и HHH-6081. Однако, если вы знаете ключевое слово, вы можете собрать достаточную информацию для рабочего примера от a few sources. Тем не менее, это не очень хорошо работает с Spring, проблема, упомянутая в этом SO question.

Таким образом, окончательное решение было немного хаком, но это работает:

public class GetConfigIntegrator implements Integrator { 

    private static Configuration configuration; 

    public static Configuration getConfiguration() { 
     return configuration; 
    } 

    @Override 
    public void integrate(Configuration configuration, /* ... */) { 
     GetConfigIntegrator.configuration = configuration; 
    } 

    // Empty Integrator implementation... 
} 

Как можно видеть, это глупо интегратор просто хранит конфигурацию в статической переменной, поэтому она может быть доступна позже. Не идеальный, но не сталкиваясь с никакими вариантами, один радуется нахождению такого пути.

Для регистрации интегратора, следующий файл должен быть создан, с одной строки на класс интегратора (полное название), например, так:

# src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator: 
<full package name>.GetConfigIntegrator 
Смежные вопросы