hibernate - @Transaction 问题 : TransactionSynchronization. beforeCompletion 抛出异常

标签 hibernate spring model-view-controller

我面临一个问题,我有一个方法正在调用服务层中的另一个方法,如下所示:

@Transactional
    @Override
    public void method1(List<String> vals)
    {
        for (String value : vals){
            method2(value);
        }
    }

@Transactional(propagation= Propagation.REQUIRED)
public void method2(String value)
{
    //Hibernate Call 1

    //Hibernate Call 2

}

我已经将 Transactional 注释放在方法 2 中,因为它也可以从 Controller 中调用。

我的事务管理器看起来像这样:
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:aspectj-autoproxy/>

<!-- Transaction manager for hibernate -->

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

</bean>

当我在 Controller 调用方法 1 时运行此代码时,出现以下错误:

12/22/11 18:4455410: ERROR [ http-8181-1] (.support.TransactionSynchronizationUtils:87 ) - TransactionSynchronization.beforeCompletion threw exception java.lang.IllegalStateException: No value for key [org.hibernate.impl.SessionFactoryImpl@1b2668f] bound to thread [http-8181-1] at org.springframework.transaction.support.TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:190) at org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCompletion(SpringSessionSynchronization.java:187) at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCompletion(TransactionSynchronizationUtils.java:84) at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion(AbstractPlatformTransactionManager.java:895) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:693) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:678) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy31.method1(Unknown Source)

最佳答案

我真的看不出这段代码有什么问题。您可以尝试的一件事是一种解决方法:将 method2 代码提取到另一种方法,比如 method3 没有 @Transactional并从保持 @Transactional 的 method2 和 method1 调用它.

附带问题:method1 和method2 是否在同一个类中?如果是并且使用了 JDK 代理,则 @Transactional从方法 1 调用时,方法 2 周围将被忽略。

关于hibernate - @Transaction 问题 : TransactionSynchronization. beforeCompletion 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604527/

相关文章:

Hibernate Embedded/Embeddable不是null异常

java - 从另一个 jar 添加到 spring 接口(interface)实现

java - 在 Spring MVC 应用程序中使用 Java 枚举?

javascript - Kendo UI 网格模板错误 - 模板无效

java - 如何在 JSP 中使用索引访问列表项

grails - 对不存在的资源进行Grails URL映射

java - 无法转换为 java.io.Serializable

java - 如何使用 Spring Data REST 的多态关联

java - Hibernate 注释放置问题

java - @Repository 中的 Spring @PostConstruct 函数被多次调用