春季批项目阅读
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,并应解决您的问题。
以上是关于春季批项目阅读的主要内容,如果未能解决你的问题,请参考以下文章