Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用两个会话工厂实例时的BeanCreationException_Java_Spring_Sessionfactory - Fatal编程技术网

Java 使用两个会话工厂实例时的BeanCreationException

Java 使用两个会话工厂实例时的BeanCreationException,java,spring,sessionfactory,Java,Spring,Sessionfactory,我创建了两个事务管理器(一个用于读请求,另一个用于读写请求)和两个会话工厂 重要片段如下所示: <tx:annotation-driven /> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="SessionFactory" /> &

我创建了两个事务管理器(一个用于读请求,另一个用于读写请求)和两个会话工厂

重要片段如下所示:

<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.NoSuchBean定义异常:未定义类型为[org.hibernate.SessionFactory]的唯一bean:应为单个匹配bean,但找到2:[SessionFactory,SessionFactory1]

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

有关于为什么会发生这种情况的指示吗?
我这边缺少什么吗?

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

还要检查Spring定义中的autowire和默认autowire的“byType”,在某个地方可能会发生自动连线。

是的,您是正确的。除此之外,我是否需要将所有事务管理器放入?因为我得到了“org.hibernate.HibernateException:没有绑定到线程的hibernate会话,并且配置不允许在此创建非事务性会话”。@tyro:您可以在
中指定特定的tx管理器,但是当您有多个tx管理器时,注释驱动的事务就不是很有用了,因为所有注释将使用相同的tx管理器。如果您需要多个tx管理器,那么编程事务可能是更好的选择,尽管它们并不漂亮:@skaffman我认为事务性注释支持使用@Transactional(“tx_Manager_Name”)的多个txn管理器。我们不能使用这个吗?@AravindA:是的,这是可行的,但前提是任何给定的方法只能由一个tx管理器调用。