2010-04-29 21 views
23

我想在我的非Spring代碼中獲得Spring定義的Hibernate配置和SessionFactory對象。以下是我的applicationContext.xml文件的定義:如何從Spring獲取Hibernate配置對象?

代碼:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 
     <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> 
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop> 
    </props> 
    </property> 
    <property name="dataSource"> 
    <ref bean="dataSource"/> 
    </property> 
    </bean> 

如果我現在請的getBean(「SessionFactory的」),我回到這似乎是一個代理一個$ Proxy0對象Hibernate的SessionFactory對象。但這不是我想要的 - 我需要LocalSessionFactoryBean本身,因爲我需要訪問配置以及SessionFactory。

我需要Configuration對象的原因是我們的框架能夠使用Hibernate的動態模型在運行時自動插入映射;這要求我們改變配置並重建SessionFactory。實際上,我們所要做的就是獲取Spring中已經存在的Hibernate配置,以便那些已經在Spring中擁有這些信息的客戶不必將其複製到hibernate.cfg.xml文件中,以便使用我們的Hibernate功能。

+0

你如何重建sessionFactory?在調用銷燬之前,您如何確保所有現有交易都已完成? – banterCZ 2013-01-08 10:11:46

回答

38
Spring容器的

一個不起眼的特點是the & prefix

當你需要問一個容器 實際FactoryBean實例 本身,而不是它產生豆,你 前言豆ID與&符號 符號&(不含引號) 調用getBean方法 ApplicationContext。因此,對於一個給定的 FactoryBeanmyBean一個id, 的 容器上調用getBean("myBean")返回 FactoryBean的產品,並調用 getBean("&myBean")返回 FactoryBean實例本身。

所以在你的情況下,使用getBean("&sessionFactory")應該返回你的LocalSessionFactoryBean實例本身。然後,您可以撥打.getConfiguration()以獲取Configuration對象。

+1

@skaffman幹得好! – 2010-04-29 11:51:04

+0

完美,正是我所需要的 - 謝謝! – 2010-04-29 13:23:58

+3

我們怎麼能@Autowire這個? – 2014-11-12 13:21:06

相關問題