我想知道应用程序运行时期间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配置?
答案 0 :(得分:0)
据我所知,在ApplicationContext
加载期间无法禁用工厂初始化。 LocalSessionFactoryBean
是FactoryBean
。 Spring将在上下文初始化期间调用该对象的getObject()
方法,这将强制更新模式。
请注意,Configuration
的{{1}}实例已在LocalSessionFactoryBean
方法中直接配置和使用。你也无法拦截它。
您需要在创建afterPropertiesSet()
之前创建自己的Configuration
实例(或自行解析文件)。您可以查看ApplicationContext
的源代码,看看是如何完成的。