2016-03-07 19 views
5

Tôi đang thiết lập một ItemRepositoryReader cho trình đọc trong bước springBatch.RepositoryItemReader không tìm phương thức với đối số

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; 
} 

đây là dòng trong kho của tôi.

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long>{ 


public EcheanceEntity findById(long id); 

@Override 
public List<EcheanceEntity> findAll(); 

Nếu sử dụng phương thức findAll(), do đó không có bất kỳ đối số nào, nó hoạt động tốt. Nhưng nếu tôi sử dụng phương thức findById (id dài), tôi nhận được "không có ngoại lệ phương thức như vậy, findById (java.lang.Long, org.springframework.data.domain.PageRequest)" từ ItemRepositoryReader. Phương pháp này hoạt động tốt mà không cần sử dụng trình đọc khi tôi đang thử nghiệm nó bằng cách sử dụng ngay kho lưu trữ.

Cảm ơn bạn.

+0

Vì phương pháp đó không có ở đó. Ngoài ra những gì sử dụng là một tìm kiếm theo id với một đối số pageable? cũng 'findById' hoặc thực sự' findOne' đã được cung cấp cũng như 'findAll' vì vậy tôi đề nghị bạn loại bỏ chúng khỏi kho lưu trữ của riêng bạn. Họ không thêm bất cứ điều gì. –

+0

Cảm ơn bạn đã phản hồi. Ngay cả khi tôi sử dụng findOne (id dài), nó hoạt động tốt bằng cách sử dụng ngay lập tức từ kho lưu trữ, nhưng không phải thông qua trình đọc. – Azhenot

+0

Bởi vì nó không có ý nghĩa để sử dụng 'findOne' trong người đọc đó cũng không có ý nghĩa để có một' findOne' hoặc 'findById' mà lấy một đối số' Pageable'. Bạn đang lấy một phần tử với một id, làm thế nào bạn sẽ sắp xếp/trang trên đó? –

Trả lời

4

Bạn cần phải xác định các phương pháp như:

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long> { 

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

Trong mô tả của phương pháp RepositoryItemReader.setMethodName bạn có thể tìm thấy lý do của nó: 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) 

Chỉ định những gì phương pháp trên kho lưu trữ để gọi. Phương pháp này phải lấy Có thể đánh số là đối số cuối cùng.

Các vấn đề liên quan