Ich richte einen ItemRepositoryReader für den Leser in einem SpringBatch-Schritt ein.RepositoryItemReader findet keine Methoden mit Argumenten
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;
}
Dies ist die Zeile in meinem Repository.
public interface EcheanceRepository extends JpaRepository<EcheanceEntity, Long>{
public EcheanceEntity findById(long id);
@Override
public List<EcheanceEntity> findAll();
Wenn Sie die Methode findAll() verwenden, also ohne Argumente, funktioniert es gut. Aber wenn ich die Methode findById (lange ID) verwende, bekomme ich "keine solche Methodenausnahme, findById (java.lang.Long, org.springframework.data.domain.PageRequest)" vom ItemRepositoryReader. Die Methode funktioniert einwandfrei, ohne den Reader zu verwenden, wenn ich ihn sofort mit dem Repository teste.
Vielen Dank.
Weil diese Methode nicht da ist. Was nützt auch eine Suche nach ID mit einem auslagerbaren Argument? auch 'findById' oder eigentlich' findOne' ist bereits vorhanden, genauso wie 'findAll', also schlage ich vor, dass Sie sie aus Ihrem eigenen Repository entfernen. Sie fügen nichts hinzu. –
Vielen Dank für Ihre Antwort. Selbst wenn ich findOne (lange ID) verwende, funktioniert es sofort, indem ich es direkt aus dem Repository, aber nicht über den Reader verwende. – Azhenot
Da es nicht sinnvoll ist, 'findOne' in diesem Leser zu verwenden, macht es keinen Sinn, ein' findOne' oder 'findById' zu haben, das ein' Pageable' Argument benötigt. Sie rufen ein Element mit einer ID ab, wie werden Sie danach sortieren/paginieren? –