RepositoryItemReader - 如何使用带有 List 参数的方法
RepositoryItemReader - How can I use a method with List parameter
我有以下存储库:
@Repository
public interface InterlocutorRepository extends PagingAndSortingRepository<Interlocutor, UsuarioId> {
Page<Interlocutor> findByFlCadastroOnlineIn(List<StatusCadOnline> flCadastroOnline, Pageable pageable);
}
我的 Spring 批处理应用程序中有以下 reader:
@Bean
public ItemReader<Interlocutor> reader() {
List<StatusCadOnline> listaStatusCadOnline = new ArrayList();
listaStatusCadOnline.add(StatusCadOnline.PENDENTE);
listaStatusCadOnline.add(StatusCadOnline.ERRO);
RepositoryItemReader<Interlocutor> reader = new RepositoryItemReader<>();
reader.setRepository(repository);
reader.setMethodName("findByFlCadastroOnlineIn");
reader.setArguments(listaStatusCadOnline);
HashMap<String, Sort.Direction> sorts = new HashMap<>();
sorts.put("nrCpf", Sort.Direction.ASC);
reader.setSort(sorts);
return reader;
}
Spring Batch 理解我的方法有两个 StatusCadOnline 类型的参数,而不是一个 List 类型的参数。
日志错误:
ERROR [SimpleAsyncTaskExecutor-178] b.c.a.c.b.steps.ItemSkipPolicy.shouldSkip 12 - java.lang.NoSuchMethodException: com.sun.proxy.$Proxy84.findByFlCadastroOnlineIn(br.com.alelo.corp.core.model.enumerator.StatusCadOnline, br.com.alelo.corp.core.model.enumerator.StatusCadOnline, org.springframework.data.domain.PageRequest)
有人可以帮我吗?
谢谢
将 JPA 的 findBy*In() 与 RepositoryItemReader 一起使用:
您需要接收参数列表,为此您必须将属性更改为 List>
针对您的案例的 运行 代码解决方案示例:
...
List<List<StatusCadOnline>> arguments = new ArrayList();
List<StatusCadOnline> attributeListIn = new ArrayList();
attributeListIn.add(StatusCadOnline.PENDENTE);
attributeListIn.add(StatusCadOnline.ERRO);
arguments.add(attributeListIn);
RepositoryItemReader<Filial> reader = new RepositoryItemReader<>();
reader.setRepository(branchRepository);
reader.setMethodName("findByFlCadastroOnlineIn");
reader.setArguments(arguments);
...
我有以下存储库:
@Repository
public interface InterlocutorRepository extends PagingAndSortingRepository<Interlocutor, UsuarioId> {
Page<Interlocutor> findByFlCadastroOnlineIn(List<StatusCadOnline> flCadastroOnline, Pageable pageable);
}
我的 Spring 批处理应用程序中有以下 reader:
@Bean
public ItemReader<Interlocutor> reader() {
List<StatusCadOnline> listaStatusCadOnline = new ArrayList();
listaStatusCadOnline.add(StatusCadOnline.PENDENTE);
listaStatusCadOnline.add(StatusCadOnline.ERRO);
RepositoryItemReader<Interlocutor> reader = new RepositoryItemReader<>();
reader.setRepository(repository);
reader.setMethodName("findByFlCadastroOnlineIn");
reader.setArguments(listaStatusCadOnline);
HashMap<String, Sort.Direction> sorts = new HashMap<>();
sorts.put("nrCpf", Sort.Direction.ASC);
reader.setSort(sorts);
return reader;
}
Spring Batch 理解我的方法有两个 StatusCadOnline 类型的参数,而不是一个 List 类型的参数。
日志错误:
ERROR [SimpleAsyncTaskExecutor-178] b.c.a.c.b.steps.ItemSkipPolicy.shouldSkip 12 - java.lang.NoSuchMethodException: com.sun.proxy.$Proxy84.findByFlCadastroOnlineIn(br.com.alelo.corp.core.model.enumerator.StatusCadOnline, br.com.alelo.corp.core.model.enumerator.StatusCadOnline, org.springframework.data.domain.PageRequest)
有人可以帮我吗?
谢谢
将 JPA 的 findBy*In() 与 RepositoryItemReader 一起使用:
您需要接收参数列表,为此您必须将属性更改为 List>
针对您的案例的 运行 代码解决方案示例:
...
List<List<StatusCadOnline>> arguments = new ArrayList();
List<StatusCadOnline> attributeListIn = new ArrayList();
attributeListIn.add(StatusCadOnline.PENDENTE);
attributeListIn.add(StatusCadOnline.ERRO);
arguments.add(attributeListIn);
RepositoryItemReader<Filial> reader = new RepositoryItemReader<>();
reader.setRepository(branchRepository);
reader.setMethodName("findByFlCadastroOnlineIn");
reader.setArguments(arguments);
...