2016-03-25 6 views
0

Я выполняю пакетное обновление, как показано ниже.java.lang.IllegalStateException: транзакция не активна

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) в 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.Transact ionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:291) на 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 (Unknown Source) в com.progrexion.pfmetljobs.update.UpdateJob.updateMembers (UpdateJob.java:94) в com.progrexion.pfmetljobs.update.UpdateJob.job (UpdateJob.java:66) на sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестно Источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) at java.lang.reflect.Method.invoke (Неизвестный источник) at org.springframework.util.MethodInvoker.invoke (MethodInvoker.java:269) at 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) в 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) at 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) на org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType (DefaultListableBeanFactory.java:447) в org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType (DefaultListableBeanFactory.java:423) at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors (BeanFactoryUtils.java:220) at org.springframework.beans.factory.support.DefaultListableB eanFactory.findAutowireCandidates (DefaultListableBeanFactory.java:1177) на org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1116) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory. Java: 1014) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:545) в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:88) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:331) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1214) на org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:543) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory. Java: 482) в org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:306) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:197) на org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:772) на 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) at 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: or[email protected]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) в org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.rollback (JdbcResourceLocalTransactionCoordinatorImpl.java:250) в орг. hibernate.engine.transaction.internal.TransactionImpl.rollback (TransactionImpl.java:89) в org.hibernate.jpa.internal.TransactionImpl.rollback (TransactionImpl.java:100) ... 51 более

+2

Вы не должны возиться с транзакциями самостоятельно, пусть Spring управляет этим для вас. –

+0

@ M.Deinum Спасибо за ваш комментарий. Если я прокомментирую следующий код, //session.beginTransaction(); //session.getTransaction(). Commit(); I get Caused by: org.hibernate.ResourceClosedException: or[email protected]bd93bc3 закрыт – choom

ответ

0

я нашел проблема. Я использую @Transactional для своей функции и использую commit внутри функции, которую транзакция уже делает. Поэтому я прокомментировал следующий код, и я работал.

//session.beginTransaction(); 
//session.getTransaction().commit(); 
//session.close(); 
Смежные вопросы