【问题标题】:How can I get the Hibernate Configuration object from Spring?如何从 Spring 获取 Hibernate Configuration 对象?
【发布时间】: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 之前都已完成?

标签: hibernate spring


【解决方案1】:

Spring 容器的一个不起眼的特性是the &amp; prefix

当您需要向容器索取时 一个实际的FactoryBean 实例 本身,而不是它生产的豆子,你 在 bean id 前加上 & 号 符号&amp;(不带引号)时 调用getBean 的方法 ApplicationContext。所以对于给定的 FactoryBean,ID 为 myBean, 调用getBean("myBean") 容器返回的产品 FactoryBean,并调用 getBean("&amp;myBean") 返回 FactoryBean 实例本身。

因此,在您的情况下,使用 getBean("&amp;sessionFactory") 应该会返回 LocalSessionFactoryBean 实例本身。然后就可以调用.getConfiguration()获取Configuration对象了。

【讨论】:

  • 我们如何@Autowire 这个?
  • @skaffman Sairam Krish 提出了一个很好的观点。以防万一,我/我们如何将 Hibernate 值注入例如某个字段?我真的很想拥有一个具有 hibernate.jdbc.batch_size 属性值的字段。你知道如何做到这一点吗?提前致谢。
猜你喜欢
  • 2014-12-14
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2016-04-01
相关资源
最近更新 更多