Когда я удаляю данные партии пружины: операция не разрешена для закрытого набора результатов - PullRequest
0 голосов
/ 14 ноября 2018

Моя среда:

JPA, Spring-boot, пакетная обработка

Я хочу удалить данные с истекшим сроком действия с помощью пакетной обработки.Я создал тасклет и сервисы.

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

    try {
        batchStepExecutionService.deleteBatchStepExecutionContextByCreateDateBefore(PREFIX_DELETE_DATE);

        batchJobExecutionService.deleteBatchJobExecutionContextByCreateDateBefore(PREFIX_DELETE_DATE);

        batchStepExecutionService.deleteBatchStepExecutionByCreateDateBefore(PREFIX_DELETE_DATE);

        batchJobExecutionService.deleteBatchJobExecutionByCreateDateBefore(PREFIX_DELETE_DATE);
        contribution.incrementWriteCount(1);
    } catch (RuntimeException e) {
        log.error("Couldn't delete batch job tables. {}", e);
        contribution.incrementWriteSkipCount();
    }

      return RepeatStatus.FINISHED;
}

Я использую собственные запросы, например:

@Query(nativeQuery = true, value = " DELETE FROM batch_step_execution_context WHERE step_execution_id IN ( "+
        "SELECT bse.step_execution_id as step_execution_id FROM batch_step_execution AS bse WHERE bse.start_time < :createTime) " )
void deleteBatchStepExecutionContext(@Param("createTime")String createTime);

Но когда я запускаю тест Junit, первый сервис проходит, но возникает ошибкана следующем.

Вот часть журналов.

2018-11-14 10:06:59.021 DEBUG 17273 --- [           main] org.hibernate.SQL                        :  DELETE FROM batch_step_execution_context WHERE step_execution_id IN ( SELECT bse.step_execution_id as step_execution_id FROM batch_step_execution AS bse WHERE bse.start_time < ?) 
2018-11-14 10:06:59.026 TRACE 17273 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [20181111]
2018-11-14 10:06:59.030  INFO 17273 --- [           main] jdbc.sqltiming                           : DELETE FROM batch_step_execution_context WHERE step_execution_id IN ( SELECT bse.step_execution_id as step_execution_id FROM batch_step_execution AS bse WHERE bse.start_time < '20181111') {executed in 2 msec}
2018-11-14 10:06:59.033 DEBUG 17273 --- [           main] c.n.d.b.s.BatchStepExecutionService      : --- Delete Batch job execution END
2018-11-14 10:07:00.040 DEBUG 17273 --- [           main] c.n.d.b.s.BatchJobExecutionService       : --- deleteBatchJobExecutionContext:20181111
2018-11-14 10:07:00.041 DEBUG 17273 --- [           main] org.hibernate.SQL                        : DELETE FROM batch_job_execution_context where job_execution_id in (select bje.job_execution_id from batch_job_execution AS bje where bje.create_time < ?) 
2018-11-14 10:07:00.043 TRACE 17273 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [20181111]
2018-11-14 10:07:00.044  INFO 17273 --- [           main] jdbc.sqltiming                           : DELETE FROM batch_job_execution_context where job_execution_id in (select bje.job_execution_id from batch_job_execution AS bje where bje.create_time < '20181111') {executed in 1 msec}
2018-11-14 10:07:00.044 ERROR 17273 --- [           main] jdbc.audit                               : 10. ResultSet.next()

java.sql.SQLException: Operation not permit on a closed resultset
    at org.mariadb.jdbc.internal.queryresults.resultset.MariaSelectResultSet.checkClose(MariaSelectResultSet.java:774)
    at org.mariadb.jdbc.internal.queryresults.resultset.MariaSelectResultSet.next(MariaSelectResultSet.java:514)
    at net.sf.log4jdbc.sql.jdbcapi.ResultSetSpy.next(ResultSetSpy.java:1984)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:968)
    at org.hibernate.loader.Loader.doQuery(Loader.java:930)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
    at org.hibernate.loader.Loader.doList(Loader.java:2617)
    at org.hibernate.loader.Loader.doList(Loader.java:2600)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429)
    at org.hibernate.loader.Loader.list(Loader.java:2424)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:336)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1967)
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322)
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125)
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:529)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:210)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:82)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:116)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy166.deleteBatchJobExecutionContext(Unknown Source)

Я не знаю, почему возникает исключение SQLEx.

...