2016-03-07 55 views
5

私は、springBatchステップでリーダーのItemRepositoryReaderを設定しています。RepositoryItemReaderが引数を持つメソッドを見つけられない

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)」が取得されます。このメソッドは、リポジトリをすぐに使用してテストするときにリーダを使用せずに正常に動作します。

ありがとうございます。

+0

この方法はありません。また、pageable引数を持つidで検索するのは何ですか? 'findById'や実際に' findOne'も 'findAll'と同様に提供されていますので、あなた自身のリポジトリから削除することをお勧めします。彼らは何も追加しません。 –

+0

ありがとうございます。 findOne(long id)を使用しても、リポジトリからすぐには使用できますが、リーダー経由ではうまく動作しません。 – Azhenot

+0

その読み手で 'findOne'を使うのは意味がありませんし、' findOne'や 'findById'に' Pageable'引数を取ることも意味がありません。あなたはidで1つの要素を取得していますが、どうやってそれを並べ替えるのですか? –

答えて

4

あなたのようにメソッドを定義する必要があります:あなたはそれの理由を見つけることができますRepositoryItemReader.setMethodName方法の説明では

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にする必要があります。

関連する問題