Я выполняю пакетное обновление, как показано ниже.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 более
Вы не должны возиться с транзакциями самостоятельно, пусть Spring управляет этим для вас. –
@ M.Deinum Спасибо за ваш комментарий. Если я прокомментирую следующий код, //session.beginTransaction(); //session.getTransaction(). Commit(); I get Caused by: org.hibernate.ResourceClosedException: or[email protected]bd93bc3 закрыт – choom