java.lang.IllegalStateException:事务处于非活动状态

时间:2016-03-25 13:58:16

标签: java spring hibernate

我正在进行批量更新,如下所示。

List<String> memberGuids = (List<String>) newMembers.stream().map(Member::getGuid).collect(Collectors.toList());        
Session session = super.getEntityManager().unwrap(Session.class);
session.beginTransaction();
ScrollableResults members = session.getNamedQuery("Member.getMembersByGuid").setParameterList("memberGuids", memberGuids).setCacheMode(CacheMode.IGNORE).scroll(ScrollMode.FORWARD_ONLY);

int count = 0;
while (members.next()) {
    Member member = (Member) members.get(0);
    updateMember(member, newMembers.get(count));
    if (++count % JDBC_BATCH_SIZE == 0) {
        session.flush();
        session.clear();
    }
}

session.getTransaction().commit();
session.close();

我正在获取数据库中的更新值,但获得:

`java.lang.IllegalStateException:事务未激活。

如果我注释掉以下代码,

//session.beginTransaction();
//session.getTransaction().commit();

我收到以下错误。

org.springframework.transaction.TransactionSystemException:无法回滚JPA事务;嵌套异常是javax.persistence.PersistenceException:回滚时出现意外错误     在org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:548)     at org.springframework.transaction.support.AbstractPlatformTransactionManager.doRollbackOnCommitException(AbstractPlatformTransactionManager.java:900)     在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:789)     在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)     在org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485)     at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)     在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)     在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)     在com.sun.proxy。$ Proxy37.update(未知来源)     在com.progrexion.pfmetljobs.update.UpdateJob.updateMembers(UpdateJob.java:94)     在com.progrexion.pfmetljobs.update.UpdateJob.job(UpdateJob.java:66)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     在org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269)     在org.springframework.beans.factory.config.MethodInvokingBean.invokeWithTargetException(MethodInvokingBean.java:119)     在org.springframework.beans.factory.config.MethodInvokingFactoryBean.afterPropertiesSet(MethodInvokingFactoryBean.java:106)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)     at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)     在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)     在org.springframework.beans.factory.support.AbstractBeanFactory.getTypeForFactoryBean(AbstractBeanFactory.java:1469)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:808)     在org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:544)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:447)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:423)     在org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:220)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1177)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)     在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)     在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)     在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)     at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)     在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)     在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)     在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)     在org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)     在org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93)     在com.progrexion.pfmetljobs.update.UpdateJob.main(UpdateJob.java:56) 引起:javax.persistence.PersistenceException:回滚时出现意外错误     在org.hibernate.jpa.internal.TransactionImpl.rollback(TransactionImpl.java:103)     在org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:544)     ......还有50个 引起:org.hibernate.ResourceClosedException:org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@bd93bc3已关闭     at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.errorIfClosed(AbstractLogicalConnectionImplementor.java:38)     at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:108)     at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:227)     at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:115)     at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:250)     at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:89)     在org.hibernate.jpa.internal.TransactionImpl.rollback(TransactionImpl.java:100)     ... 51更多

1 个答案:

答案 0 :(得分:0)

我发现了问题。我在我的函数上使用@Transactional并在事务正在执行的函数内使用commit。所以我注释掉了以下代码并且我工作了。

//session.beginTransaction();
//session.getTransaction().commit();
//session.close();
相关问题