BeanCreationException при использовании двух экземпляров фабрик Session - PullRequest
1 голос
/ 05 января 2012

Я создал два менеджера транзакций (один для запросов READ и другой для запросов READ-WRITE) и две фабрики сеансов для одного и того же.

Важные фрагменты:

<tx:annotation-driven />

<bean id="txManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="SessionFactory" />
</bean>

<bean id="txManagerRead"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="SessionFactory" />
    <qualifier value="READ"/>
</bean>

<bean id="txManagerWrite"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="Session1" />
     <qualifier value="WRITE"/>
</bean>

<bean id="AbstractSessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    abstract="true">
    <property name="annotatedClasses">
        <list>
.....
....
        </list>
    </property>
    <property name="exposeTransactionAwareSessionFactory">
        <value>true</value>
    </property>
</bean>

<bean id="SessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    parent="AbstractSessionFactory">
    <property name="hibernateProperties">
        <props>
.........
.........
</props>
</property>
</bean>



<bean id="SessionFactory1"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
    parent="AbstractSessionFactory">
    <property name="hibernateProperties">
        <props>
.........
.........
</props>
</property>
</bean>

В тот момент, когда я пытаюсь создать компонент для DAO, например:

<bean id="configurationDAO" class="com.amazon.im.dao.hibernate.ConfigurationDAOImpl">
  <property name="sessionFactory" ref="SessionFactory" />
</bean>

Я получаю BeanCreationException со следующим сообщением об ошибке:

org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'configurationDAO': сбой внедрения зависимостей с автопроводкой; вложенным исключением является org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: public org.hibernate.SessionFactory com.amazon.im.dao.hibernate.GenericDAOImpl.sessionFactory; вложенным исключением является org.springframework.beans.factory.NoSuchBeanDefinitionException: не определен уникальный бин типа [org.hibernate.SessionFactory]: ожидается один соответствующий бин, но найден 2: [SessionFactory, SessionFactory1]

Я не могу использовать LocalSessionFactoryBean, потому что я хочу использовать свойство annotatedClasses.

Есть какие-нибудь указатели на то, почему это происходит? Чего не хватает с моей стороны?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Похоже, что свойство sessionFactory вашего класса GenericDAOImpl (который, как я предполагаю, является суперклассом ConfigurationDAOImpl?) Помечено @Autowired.Это не сработает, потому что на выбор есть две фабрики сессий.Кроме того, вы вручную вводите правильную фабрику сеанса, используя <property>, поэтому @Autowired не требуется.

0 голосов
/ 05 января 2012

Также проверьте наличие autowire и default-autowire для "byType" в ваших определениях Spring, там где-то должна быть автопроводка ..

...