RepositoryItemReader找不到带参数

时间:2016-03-07 13:11:07

标签: java spring spring-batch

我在springBatch步骤中为读者设置了一个ItemRepositoryReader。

public ItemReader<EcheanceEntity> reader(){
    RepositoryItemReader<EcheanceEntity> reader = new RepositoryItemReader<EcheanceEntity>();
    reader.setRepository(echeanceRepository);
    reader.setMethodName("findById");
    List parameters = new ArrayList();
    long a = 0;
    parameters.add(a);
    reader.setArguments(parameters);
    Map<String, Direction> sort = new HashMap<String, Direction>();
    sort.put("id", Direction.ASC);
    reader.setSort(sort);
    return reader;
}

这是我的存储库中的一行。

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long>{


public EcheanceEntity findById(long id);

@Override
public List<EcheanceEntity> findAll();

如果使用方法findAll(),那么没有任何参数,它工作正常。但是如果我使用方法findById(long id),我会从ItemRepositoryReader中得到“没有这样的方法异常,findById(java.lang.Long,org.springframework.data.domain.PageRequest)”。当我通过立即使用存储库测试它时,该方法可以在不使用阅读器的情况下正常工作。

谢谢。

1 个答案:

答案 0 :(得分:8)

在使用RepositoryItemReader#setMethodName方法的情况下,您需要在最后位置的存储库方法签名中添加Pageable类型的参数:

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long> {

    public Page<EcheanceEntity> findById(long id, Pageable pageable);
    ...

您可以在文档中找到它的说明:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/data/RepositoryItemReader.html#setMethodName-java.lang.String-

public void setMethodName(java.lang.String methodName)
     

指定要调用的存储库上的方法。 此方法必须   将Pageable作为最后一个参数