Как я могу получить объект конфигурации Hibernate из Spring? - PullRequest
25 голосов
/ 29 апреля 2010

Я пытаюсь получить определяемые Spring объекты Hibernate Configuration и 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.

1 Ответ

41 голосов
/ 29 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...