我创建了两个事务管理器(一个用于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”属性。
关于它为什么会发生的任何指示? 我身边有什么遗漏吗?
答案 0 :(得分:2)
看起来sessionFactory
类的GenericDAOImpl
属性(我假设是ConfigurationDAOImpl
的超类?)用@Autowired
注释。这不起作用,因为它有两个会话工厂可供选择。此外,您使用<property>
手动注入正确的会话工厂,因此不需要@Autowired
。
答案 1 :(得分:0)
还要检查Spring定义中“byType”的autowire和default-autowire,这是在某个地方发生的自动装配......