以编程方式确定hbm2ddl值而不触发架构更新

时间:2013-10-02 13:44:24

标签: java hibernate hbm2ddl

我想知道应用程序运行时期间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会立即触发自动更新。

我可以从磁盘读取配置文件并对其进行解释 - 但我更愿意通过hibernate构建配置,然后从那里读取属性。

是否有其他方法可以在不触发自动架构更新的情况下创建或访问hibernate配置?

1 个答案:

答案 0 :(得分:0)

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

请注意,Configuration的{​​{1}}实例已在LocalSessionFactoryBean方法中直接配置和使用。你也无法拦截它。

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