2014-09-22 17 views
8

Sono a conoscenza della domanda this, ma utilizzando org.springframework.data:spring-data-jpa:1.7.0.RELEASE Ho ancora lo stesso problema (Either use @Param on all parameters except Pageable and Sort typed once, or none at all!). La mia classe è:Pageable e @Param in un problema di dati JpaRepository problema problema [2]

public interface BalanceHistoryRepository extends JpaRepository<BalanceHistory, Long> { 
    @Query("select bh from BalanceHistory bh where bh.account.id = :idAccount") 
    public BalanceHistory findCurrentBalanceByAccountNumber(PageRequest pageCriteira, @Param("idAccount") long idAccount); 
} 

Modifica

chiamata:

Pageable page = new PageRequest(0, 1, Sort.Direction.DESC, "date"); 
     BalanceHistory bh = balanceHistoryRepository.findCurrentBalanceByAccountNumber(1,page); 

Metodo:

@Query("select bh from BalanceHistory bh where bh.account.id = :idAccount") 
public BalanceHistory findCurrentBalanceByAccountNumber(@Param("idAccount") long idAccount, Pageable pageCriteira); 
+0

Il bug è in spring-data-commons se si ha una dipendenza da una versione precedente di spring-data-commons che aggiorna spring-data-jpa non sarà d'aiuto. –

+0

Questi ragazzi java.lang devono rilassarsi .... – muttonUp

risposta

14

Assicurarsi di utilizzare Pageable invece di PageRequest in modo che il primo parametro è riconosciuto come uno da non essere vincolato alla domanda reale. Inoltre, è necessario modificare il tipo di ritorno su Page o List poiché restituirai per lo più risultati multipli.

public interface BalanceHistoryRepository extends CrudRepository<BalanceHistory, Long> { 

    @Query("select bh from BalanceHistory bh where bh.account.id = :idAccount") 
    Page<BalanceHistory> findCurrentBalanceByAccountNumber(@Param("idAccount") long idAccount, Pageable pageable); 
} 

Questo dovrebbe fare il trucco. Si noti che in genere si consiglia di non per estendere le interfacce specifiche del negozio in quanto espongono API specifiche dell'archivio che devono essere esposte solo se realmente necessarie.

+0

Grazie per l'input! Questa modifica produce un 'java.lang.IllegalStateException: Il metodo deve avere uno dei seguenti tipi di ritorno! [interface org.springframework.data.domain.Slice, interfaccia org.springframework.data.domain.Page, interfaccia java.util.List] 'eccezione. Vedi la mia modifica per favore :) –

+3

Risolvi il tuo tipo di reso. Si inserisce un 'Pageable' quindi il risultato deve essere una pagina di risultati non un singolo risultato. –

+0

@Oliver: Perché il parametro deve essere 'Pageable' e io utilizzo il parametro a' PageRequest' getta questa eccezione menzionata nella domanda. –