1

我创建了两个事务管理器(一个用于 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 的那一刻,例如:

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

我收到BeanCreationException以下错误消息:

org.springframework.beans.factory.BeanCreationException:创建名为“configurationDAO”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:public org.hibernate.SessionFactory com.amazon.im.dao.hibernate.GenericDAOImpl.sessionFactory;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [org.hibernate.SessionFactory] ​​的唯一 bean:预期单个匹配 bean 但找到 2:[SessionFactory,SessionFactory1]

我不能使用LocalSessionFactoryBean,因为我想使用“annotatedClasses”属性。

关于为什么会发生的任何指示?我身边有什么遗漏吗?

4

2 回答 2

2

看起来sessionFactory你的类的属性GenericDAOImpl(我假设它是ConfigurationDAOImpl? 的超类)用@Autowired. 这不起作用,因为它有两个会话工厂可供选择。此外,您正在使用 手动注入正确的会话工厂<property>,因此@Autowired没有必要。

于 2012-01-05T12:23:59.897 回答
0

还要检查 Spring 定义中“byType”的 autowire 和 default-autowire ,因为某处会发生自动装配。

于 2012-01-05T12:36:55.607 回答