春季批项目阅读

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了春季批项目阅读相关的知识,希望对你有一定的参考价值。

我正在使用JpaPagingItemReaderBuilder来查询一个数据库,结果正在插入另一个数据库中。

查询返回的结果没有问题,但是读取器的返回出现错误,在处理器中,您可以在下面检查我的编码和错误。

有人可以让我对此有见识吗?以及为什么我无法处理结果?

这是我的代码:

        @Bean
        public Step sampleStep()

            return stepBuilderFactory.get("sampleStep")
                    .<FCR_HDR,FCR_HDR>chunk(5)
                    .reader(itemReader())
                    .processor(processor())
                    //.writer(i -> i.stream().forEach(j -> System.out.println(j)))
                    //.writer(i -> i.forEach(j -> System.out.println(j)))
                    .writer(jpaItemWriter())
                    .build();
        

        @Bean
        public Job sampleJob()
            return jobBuilderFactory.get("sampleJob")
                    .incrementer(new RunIdIncrementer())
                    .start(sampleStep())
                    .build();
        

        @Bean
        public FcrItemProcessor processor() 
            return new FcrItemProcessor();
        
        @Bean
        @StepScope
        public JpaPagingItemReader<FCR_HDR> itemReader(/*@Value("$query") String query*/)

            return new JpaPagingItemReaderBuilder<FCR_HDR>()
                    .name("db2Reader")
                    .entityManagerFactory(localContainerEntityManagerFactoryBean.getObject())
                    .queryString("select f.fcr_ref,f.num_subbills from FCR_HDR f where f.fcr_ref in ('R2G0130185','R2G0128330')")
                    //.queryString(qry)
                    .pageSize(3)
                    .build();
        


        @Bean
        @StepScope
        public JpaItemWriter jpaItemWriter()
            JpaItemWriter writer = new JpaItemWriter();
            writer.setEntityManagerFactory(emf);
            return writer;

        


    

    public class FcrItemProcessor implements ItemProcessor<FCR_HDR,FCR_HDR> 

    private static final Logger log = LoggerFactory.getLogger(FcrItemProcessor.class);

    @Nullable
    @Override
    public FCR_HDR process(FCR_HDR fcr_hdr) throws Exception 
        final String fcrNo = fcr_hdr.getFcr_ref();
        final String numsubbills = fcr_hdr.getNum_subbills();

        final FCR_HDR transformFcr = new FCR_HDR();

        transformFcr.setFcr_ref(fcrNo);
        transformFcr.setNum_subbills(numsubbills);

        log.info("Converting (" + fcr_hdr + ") into (" + transformFcr + ")");

        return transformFcr;
    
    

错误:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.electronicfcr.efcr.model.FCR_HDR
答案

由于在JpaPagingItemReader中配置了以下查询:

.queryString("select f.fcr_ref,f.num_subbills from FCR_HDR f where f.fcr_ref in ('R2G0130185','R2G0128330')")

查询的格式为JPQL,将由JPA处理,如果您从映射实体中选择某些映射列,则JPA将返回Object[]

更改为:

.queryString("select f from FCR_HDR f where f.fcr_ref in ('R2G0130185','R2G0128330')")

这样它将返回映射的实体类(即FCR_HDR,并应解决您的问题。

以上是关于春季批项目阅读的主要内容,如果未能解决你的问题,请参考以下文章

春季启动补丁

春季项目出错,休眠

如何运行春季项目

李宏毅2023春季机器学习课程

事务未在春季批处理项目编写器中回滚

我应该在我的春季项目中使用啥样的测试(我做得对吗)?