java - 使用多个事务管理器时没有 Hibernate session 绑定(bind)到线程

标签 java hibernate spring sessionfactory transactionmanager

我创建了两个事务管理器(一个用于 READ 请求,另一个用于 READ-WRITE 请求)和两个 session 工厂。

重要片段如下:

<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="SessionFactory1" />
     <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>

我遇到以下异常:

Caused by: org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)

    at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)

    at com.amazon.im.dao.hibernate.GenericDAOImpl.getSession(GenericDAOImpl.java:53)

    at com.amazon.im.dao.hibernate.CategoryDAOImpl.findAllActiveCategories(CategoryDAOImpl.java:54)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

调用DAO的方法如下:

 @Transactional(rollbackFor = { DependencyException.class, ServiceException.class }, readOnly = true, value="READ")
@Operation("getActiveCategories")
public GetActiveCategoriesResponse getActiveCategories() throws ServiceException, DependencyException
{ .....
......
......
}

谁能指出我做错的部分?

最佳答案

根据 this 尝试使用 @Transactional("Tx_Manager_Name") .您的配置似乎是正确的,因为通过限定符也支持多个 Txn 管理器。

关于java - 使用多个事务管理器时没有 Hibernate session 绑定(bind)到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8745377/

相关文章:

java - 如何通过链接发送参数到java web服务以及如何在java中获取它

java - 从包含一对整数的列表中删除重复元素的复杂性

hibernate - JPA规范是否允许引用非主键列?

java - 了解项目中的工作流程

java - lombok - 找不到符号 getId()

java - 如何设置从数据库获取数据的超时?

Java:在嵌套参数化类型中获取内部类型(反射)

java - 两天之间的 hibernate 标准

java - 使用多个功能分支时处理架构更改

java - 如何让集成测试 setUp() 操作在嵌入式 Jetty 容器中运行的内存数据库中的 HSQL 数据?