【发布时间】:2011-02-13 17:35:18
【问题描述】:
我正在尝试在我的非 Spring 代码中获取 Spring 定义的 Hibernate Configuration 和 SessionFactory 对象。以下是我的 applicationContext.xml 文件中的定义:
代码:
<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 本身,因为我需要访问 Configuration 以及 SessionFactory。
我需要 Configuration 对象的原因是我们的框架能够使用 Hibernate 的动态模型在运行时自动插入映射;这需要我们更改配置并重建 SessionFactory。实际上,我们要做的只是获取 Spring 中已经存在的 Hibernate 配置,以便那些已经在 Spring 中拥有该信息的客户无需将其复制到 hibernate.cfg.xml 文件中即可使用我们的 Hibernate 功能。
【问题讨论】:
-
你如何重建 sessionFactory?以及如何确保所有现有事务在调用destroy 之前都已完成?