2016-05-14 12 views
2

Ich entwickle eine Webapp mit JHipster, die Zahlungen verwaltet und die Zahlungen filtern wollte, die ein Benutzer sehen kann, so dass er nur seine Zahlungen sehen kann. Um dies zu tun, folgte ich der blog tutorial von Matt Raible auf Youtube. Er verwendet findByUserIsCurrentUser(), das von JHipster generiert wird.Inkompatible Typen Liste und Seite

List<Blog> blogs = blogRepository.findByUserIsCurrentUser(); 

Als ich die gleiche Änderung in meinem Projekt mache ich den Typ gefunden, dass ich zurückkehren muss, ist eine Seite, und ich bekomme einen inkompatiblen Typ Fehler, hier ist meine Methode:

public Page<Payment> findAll(Pageable pageable) { 
    log.debug("Request to get all Payments"); 
    Page<Payment> result = paymentRepository.findByUserIsCurrentUser(); 
    return result; 
} 

Wenn ich wechsle die findAll (seitenwechselbar) für findByUserIsCurrentUser(), die in der PaymentRepository erklärt wird wie folgt

public interface PaymentRepository extends JpaRepository<Payment,Long> { 
    @Query("select payment from Payment payment where payment.user.login = ?#{principal.username}") 
    List<Payment> findByUserIsCurrentUser(); 
} 

ich die folgende Fehlermeldung erhalten:

Error

Wie kann ich das lösen?

Antwort

2

Sie können dies auf zwei Arten beheben. Angenommen, Sie verwenden einen Dienst, wenn nicht immer noch sehr ähnlich:

Methode 1: Wenn Sie möchten, dass Ihr Dienst ALLE Zahlungen für den aktuellen Benutzer zurückgibt, müssen Sie Ihren Dienst und wahrscheinlich Ihre Ressource ändern

public List<Payment> findAll() { 
    log.debug("Request to get all Payments"); 
    List<Payment> result = paymentRepository.findByUserIsCurrentUser(); 
    return result; 
} 

Und in Ihrer Ressource: eine Liste statt einer Seite zu handhaben

public List<Payment> getAllPayments() { 
    log.debug("REST request to get all Payments"); 
    List<Payment> payments = paymentService.findAll(); 
    return payments; 
} 

Alternativ Sie "pagination": "pagination"-"pagination": "no" inändernund führen Sie den Generator erneut aus. Dies wird den Service, die Ressource und das Repository ohne Paginierung neu generieren.

Methode 2: Wenn Sie Ihren Dienst paginierte sein wollen, müssen Sie Ihre Repository-Methode ändern, um das Pageable Objekt zu akzeptieren, und kehren Sie eine Seite:

public interface PaymentRepository extends JpaRepository<Payment,Long> { 
    @Query("select payment from Payment payment where payment.user.login = ?#{principal.username}") 
    Page<Payment> findByUserIsCurrentUser(Pageable pageable); 
} 

Dann müssen Sie die seitenwechselbar passieren Objekt in von Ihrem Service:

public Page<Payment> findAll(Pageable pageable) { 
    log.debug("Request to get all Payments"); 
    Page<Payment> result = paymentRepository.findByUserIsCurrentUser(pageable); 
    return result; 
} 

Dies wird eine Teilmenge der Ergebnisse zurück, basierend auf, was auch immer das pageable Objekt enthält. Dazu gehören Größe, Seitennummer, Offset und Sortierung. Bei einer Größe von 20 und einer Seitenzahl von 0 werden beispielsweise die ersten 20 Ergebnisse zurückgegeben. Wenn Sie die Seitenzahl auf 1 ändern, werden die nächsten 20 Ergebnisse angezeigt. Diese Parameter werden in der Regel vom Frontend an Ihre API übergeben. Sie werden feststellen, dass getAllPayments() in PaymentResource über einen Pageable Parameter verfügt.

+0

Funktioniert perfekt, vielen Dank für Ihre ausführliche Hilfe! Ich habe die paginierte Lösung verwendet. – Ivan

Verwandte Themen