2017-06-26 5 views
2

Ich benutze Spring Data Rest JPA, die die Abfrage intern auf der Grundlage von Methodenname implementiert.jpa Abfrage mit optionalen Parametern

Ich schrieb die folgende Methode in meine Repository-Schnittstelle, die alle Benutzer in einem Zustand auflisten sollte und wenn der Name und/oder das Alter vorhanden ist, sollte es das Ergebnis filtern.

StateID ist obligatorisch, aber Name und Alter sind optional Filterparameter

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable); 

ich keine Ergebnisse bekommen werde. Wo mache ich falsch?

+0

@KrishnaKuntala aber Frühling Daten-Jpa wird out-of-the-Box-rechts implementieren – zilcuanu

+1

Ich denke, Ihre Abfrage wird wahrscheinlich interpretiert als: (StateId Und Name) ODER Alter, was nicht das ist, was Sie wollen. Ihre beste Wahl wäre, Kriterien api zu verwenden oder eine dynamische Abfrage zu erstellen, wenn sich Ihre Abfrage zur Laufzeit der optionalen Parameter ändert. –

+0

Mögliches Duplikat von [JPA Query zur Behandlung des NULL-Parameterwerts] (https://stackoverflow.com/questions/28554798/jpa-query-to-handle-null-parameter-value) –

Antwort

1

können Sie

versuchen Es gibt keine Fehler in Ihrer Methode defination.

public List<User> findByStateIdAndNameOrAge(Integer stateId, String name , Integer age, Pageable pageable); 

aber man kann nicht null Parameter an diese Methode übergeben, so dass es leer jeder Parameter setzen, wenn Sie nicht arbeiten.

+0

Ja. Name und Alter sind Anfrageparameter. Sie können Null sein, und wenn es so ist, sollte es die vollständige Benutzerliste – zilcuanu

+0

zurückgeben Die andere Weise ist, dass Sie vor dem Treffen einer API herausfinden können, welche Parameter Sie null erhalten und abhängig davon können Sie unterschiedliche API aufrufen. –

+0

Wenn Sie beispielsweise feststellen, dass der Name leer ist, sollten Sie eine API auslösen, die keinen Namen als Eingabeparameter hat. Entfernen Sie einfach den API-Parameter, der null ist. Dazu sollten Sie eine API als öffentliche Liste auslösen. findByStateIdAndAge (Integer stateId, Ganzzahlalter, umsetzbare auslagerbare); –

Verwandte Themen