Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring批处理使用JpaPagingItemReader JpaItemWriter没有正在进行的事务_Jpa_Spring Data_Spring Batch - Fatal编程技术网

Spring批处理使用JpaPagingItemReader JpaItemWriter没有正在进行的事务

Spring批处理使用JpaPagingItemReader JpaItemWriter没有正在进行的事务,jpa,spring-data,spring-batch,Jpa,Spring Data,Spring Batch,我的项目使用java配置,即由其他java配置文件创建的DataSourceentityManagerFactoryPlatformTransactionManager 当ItemReader读取数据时,ItemProcessor转换的数据itemreater有一些错误 我怎样才能解决这个问题 错误消息 2015-01-17 16:26:30.390 ERROR AbstractStep:225 - Encountered an error executing step testStep in

我的项目使用java配置,即由其他java配置文件创建的
DataSource
entityManagerFactory
PlatformTransactionManager

ItemReader
读取数据时,
ItemProcessor
转换的数据
itemreater
有一些错误

我怎样才能解决这个问题


错误消息

2015-01-17 16:26:30.390 ERROR AbstractStep:225 - Encountered an error executing step testStep in job validJob
javax.persistence.TransactionRequiredException: no transaction is in progress
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.checkTransactionNeeded(AbstractEntityManagerImpl.java:1171)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1332)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)  
如何在以下代码上启用事务:

  @Configuration
        @EnableBatchProcessing
        public class JobConfiguration {   

     @Inject
            private PlatformTransactionManager transactionManager;

         @Inject
            private EntityManagerFactory emf;    

         @Bean
            public Job validJob(JobBuilderFactory jobBuilderFactory,Step step) {
                return jobBuilderFactory.get("validJob").flow(step).end().build();
            }

            @Bean
            public Step testStep(StepBuilderFactory stepBuilderFactory, ItemReader<PurchaseOrder> reader,
                    ItemWriter<PurchaseOrder> writer, ItemProcessor<PurchaseOrder, PurchaseOrder> processor) {
                return stepBuilderFactory.get("testStep")//
                        .transactionManager(transactionManager)//
                        .<PurchaseOrder, PurchaseOrder>chunk(100)//
                        .reader(reader)//
                        .processor(processor)//
                        .writer(writer)//
                        .build();
            }

            @Bean
            public ItemReader<PurchaseOrder> reader() {
                JpaPagingItemReader<PurchaseOrder> reader = new JpaPagingItemReader<PurchaseOrder>();
                reader.setEntityManagerFactory(emf);
                reader.setQueryString(" select p from PurchaseOrder p ");
                reader.setTransacted(false);
                return reader;
            }

            @Bean
            public ItemProcessor<PurchaseOrder, PurchaseOrder> processor() {
                return new PurchaseOrderItemProcessor();
            }

            @Bean
                        public ItemWriter<PurchaseOrder> writer() {
                JpaItemWriter<PurchaseOrder> writer = new JpaItemWriter<PurchaseOrder>();
                writer.setEntityManagerFactory(emf);
                return writer;

            }
@配置
@启用批处理
公共类作业配置{
@注入
私有平台transactionManager transactionManager;
@注入
私人实体管理工厂emf;
@豆子
公共作业有效作业(JobBuilderFactory JobBuilderFactory,步骤){
返回jobBuilderFactory.get(“validJob”).flow(step.end().build();
}
@豆子
公共步骤测试步骤(StepBuilderFactory StepBuilderFactory、ItemReader reader、,
ItemWriter编写器、ItemProcessor处理器){
返回stepBuilderFactory.get(“testStep”)//
.transactionManager(transactionManager)//
.chunk(100)//
.读卡器(读卡器)//
.处理器(处理器)//
.作者(作者)//
.build();
}
@豆子
公共项目阅读器(){
JpaPagingItemReader=新的JpaPagingItemReader();
reader.setEntityManagerFactory(emf);
reader.setQueryString(“从PurchaseOrder p中选择p”);
reader.setTransaction(假);
返回读取器;
}
@豆子
公共项目处理器(){
返回新的PurchaseOrderItemProcessor();
}
@豆子
公共项目编写器(){
JpaItemWriter=新的JpaItemWriter();
writer.setEntityManagerFactory(emf);
返回作者;
}

欢迎使用Stack Overflow。如果您纠正明显的拼写错误并使句子通顺,您的问题会得到更好的回答。如果英语不是您的第一语言,至少要检查拼写。对不起,下次提交检查之前,我会问很多问题。事务管理器的配置是否与您在提交检查时使用的相同作业作为一个整体?如果是这样,默认情况下,区块应该包装在事务中。。。