2016-03-23 10 views
2

Ich verwende Spring Datenrest und versuche, die Abfrage für zwei der überladenen findAll-Methoden mit @Query anpassen. Allerdings, wenn ich dies versuchen, erhalte ich diesen Fehler:Anpassen der Abfrage für Paging und Sortieren im Frühjahr Datenrest

java.lang.IllegalStateException: Ambiguous search mapping detected. Both public abstract org.springframework.data.domain.Page courses.CourseRepository.findAll(org.springframework.data.domain.Pageable) and public abstract java.lang.Iterable courses.CourseRepository.findAll(org.springframework.data.domain.Sort) are mapped to /findAll! Tweak configuration to get to unambiguous paths!

Wenn diese Methoden die URL aufgerufen werden nicht enthalten/findAll durch Konvention. Eine URL für das Abrufen von unsortierten Kurse (aber unter Verwendung von Paging) ist

http://localhost:8080/v1/courses

und Sortierung ist

http://localhost:8080/v1/courses?sort=title

Hier ist der relevante Code, der recht einfach ist:

public interface CourseRepository extends PagingAndSortingRepository<Course, Long> { 

    @Override 
    @Query("SELECT c FROM Course c WHERE c.visible = 'Yes'") 
    Page<Course> findAll(Pageable pageable); 

    @Override 
    @Query("SELECT c FROM Course c WHERE c.visible = 'Yes'") 
    Iterable<Course> findAll(Sort sort); 
} 

ich auch habe versucht, eine @namedQuery für die Course-Entität mit derselben Fehlermeldung zu verwenden.

EDIT:

ich entdeckt habe, dass die findAll (Pageable seitenwechselbar) Methode ‚eingebaute‘ hat Sortierung, aber es die Ergebnisse nicht sortieren. Wenn ich die folgende URL anklicke und versuche, nach Titel zu sortieren, sind die Ergebnisse eindeutig nicht nach Titel sortiert. Ohne die benutzerdefinierte @Query werden die Ergebnisse jedoch sortiert.

http://localhost:8080/v1/courses?sort=title

+0

Haben Sie nur Probleme beim Sortieren? können Sie den Codeteil für den Aufruf der Repository-Methode Seite findAll (Auslagerungsdatei) senden. Eigentlich wo würden Sie zum Sortieren konfigurieren. – Shaan

+0

@PremkumarMathivanan, da es Spring Data Rest der Aufruf von findAll ist hinter den Kulissen. Ich habe keinen spezifischen Code, der diese Methode aufruft. – acvcu

+0

Kannst du bestätigen, habe ich dir in der Nähe geantwortet? – Shaan

Antwort

0

Ich denke, Sie versuchen, Fundort Methode der Federdaten zu überlasten. Dies kann nur durch CustomRepository erreicht werden. Hier finden Sie das nützliche link, das Sie beim Erstellen von CustomRepository unterstützt.

CustomRepository - Sie können eine Klasse mit den benutzerdefinierten Methoden zum Optimieren der Springdata-Methode basierend auf den Anforderungen definieren.

Frühling Dokumentation link für die gleiche

Verwandte Themen