Подтвердить что ты не робот

Как получить объект конфигурации Hibernate от Spring?

Я пытаюсь получить Spring -определенные конфигурации Hibernate и объекты SessionFactory в моем коде Spring. Ниже приведено определение в файле 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, потому что мне нужен доступ к настройке, а также SessionFactory.

Причина, по которой мне нужен объект Configuration, заключается в том, что наша инфраструктура может использовать динамическую модель Hibernate для автоматической вставки сопоставлений во время выполнения; это требует изменения конфигурации и восстановления SessionFactory. На самом деле все, что мы пытаемся сделать, это получить конфигурацию Hibernate, которая уже существует в Spring, так что те из наших клиентов, которые уже имеют эту информацию в Spring, не должны дублировать ее в файл hibernate.cfg.xml файл, чтобы использовать наши функции Hibernate.

4b9b3361

Ответ 1

Одна скрытая особенность контейнера Spring префикс &:

Когда вам нужно спросить контейнер для фактический экземпляр FactoryBeanсам, а не bean он производит, вы предисловие bean id с амперсандом символ & (без кавычек), когда вызывая метод getBean ApplicationContext. Итак, для данного FactoryBean с идентификатором myBean, вызывая getBean("myBean") на контейнер возвращает произведение FactoryBean и вызывать getBean("&myBean") возвращает FactoryBean.

Итак, в вашем случае использование getBean("&sessionFactory") должно вернуть вам экземпляр LocalSessionFactoryBean. Затем вы можете вызвать .getConfiguration(), чтобы получить объект Configuration.