2016-03-07 10 views
5

Konfiguruję ItemRepositoryReader dla czytnika w kroku SpringBatch.RepositoryItemReader nie znajduje metod z argumentami

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

To jest linia w moim repozytorium.

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long>{ 


public EcheanceEntity findById(long id); 

@Override 
public List<EcheanceEntity> findAll(); 

Jeśli używasz metody findAll(), więc bez żadnych argumentów, działa dobrze. Ale jeśli użyję metody findById (long id), otrzymam "brak takiego wyjątku metody, findById (java.lang.Long, org.springframework.data.domain.PageRequest)" z ItemRepositoryReader. Metoda działa dobrze bez korzystania z czytnika, gdy testuję go, używając natychmiast repozytorium.

Dziękuję.

+0

Ponieważ tej metody nie ma. Co to jest użycie identyfikatora id z argumentem, który można wyświetlić? również 'findById' lub faktycznie' findOne' jest już dostarczony, a także 'findAll', więc proponuję usunąć je z własnego repozytorium. Nic nie dodają. –

+0

Dziękuję za odpowiedź. Nawet jeśli używam findOne (long id), działa dobrze, używając natychmiast z repozytorium, ale nie przez czytnik. – Azhenot

+0

Ponieważ nie ma sensu używać 'findOne' w tym czytniku ani nie ma sensu mieć' findOne' lub 'findById', który pobiera argument" Pageable ". Wyszukujesz jeden element o identyfikatorze, w jaki sposób zamierzasz go posortować? –

Odpowiedz

4

Trzeba zdefiniować metodę jako:

public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long> { 

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

W opisie sposobu RepositoryItemReader.setMethodName można znaleźć przyczynę tego: 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) 

Określa, jaka metoda na repozytorium do wywołania. Ta metoda musi potraktować Pageable jako ostatni argument.

Powiązane problemy