0

我想知道在我的应用程序运行期间 hbm2ddl 功能的价值。我成功地使用以下代码确定了该值:

@Autowired
private ApplicationContext applicationContext;

private getHbm2DdlValue() {
    LocalSessionFactoryBean sessionFactoryBean = (LocalSessionFactoryBean) 
            applicationContext.getBean("&sessionFactory");
    Configuration conf = sessionFactoryBean.getConfiguration();
    String hbm2ddlValue = conf.getProperty("hibernate.hbm2ddl.auto");
    return hbm2ddlValue;
}

现在,我想在触发自动更新之前知道该值。上述解决方案的问题是,检索 LocalSessionFactoryBean 会立即触发自动更新。

我可以从磁盘读取配置文件并解释它 - 但我宁愿让配置通过休眠构建,然后从那里读取属性。

有没有其他方法可以在不触发自动模式更新的情况下创建或访问休眠配置?

4

1 回答 1

0

ApplicationContext据我所知,在加载过程中无法禁用工厂初始化。是LocalSessionFactoryBean一个FactoryBean。Spring 将在上下文初始化期间调用该对象的getObject()方法,这将强制更新模式。

请注意, 的Configuration实例LocalSessionFactoryBean是直接在afterPropertiesSet()方法中配置和使用的。你也无法拦截它。

在创建之前,您需要创建自己的Configuration实例(或自己解析文件)ApplicationContext。您可以查看源代码LocalSessionFactoryBean以了解它是如何完成的。

于 2013-10-02T13:56:48.847 回答