/ / Filtern Sie das JPA-Repository nach mehreren optionalen Parametern - java, spring-mvc, spring-boot, spring-data-jpa

Filter JPA Repository durch mehrere optionale Parameter - Java, Feder-Mvc, Spring-Boot, Feder-Daten-Jpa

Ich habe einen einfachen REST-Dienst, der eine Benutzerprofilentität mit etwa 20 Feldern zurückgibt.

Ich muss eine Funktion implementieren, um die Daten zu filtern, bei denen der Nachname erforderlich ist. Alle anderen Felder (Vorname, Alter, Ort, Bundesland, Postleitzahl usw.) sind jedoch optional.

Gibt es eine Möglichkeit, dies zu tun? JpaRepository ohne viel zu schaffen if/else Aussagen für jede einzelne Kombination von Patamentierern?

Antworten:

0 für die Antwort № 1
  • Es ist immer am besten, eine DTO-Darstellung einer Entität in der Antwort auf REST.
  • In Ihrem DTO können Sie nur erforderliche Felder von einer Entität und zuordnen ignorieren Sie andere optionale Parameter.

Sieh dir das an http://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application


0 für die Antwort № 2

Es ist ein Anwendungsfall für JPA-Kriterien (verfügbar seit JPA2).
In der Tat, wenn Sie eine dynamische Abfrage schreiben möchten, möchten Sie vor allem nicht fest codiert JPQL Abfragen für jede Kombination und Sie möchten keine verketteten Brocken von JPQL Entweder ist dies fehleranfällig und wird zur Kompilierzeit nicht geprüft.

Beachten Sie, dass auf jeden Fall (Criteria oder JPQL) Sie sollten für jede mögliche Option prüfen, ob der Client sie angegeben hat, um sie bei der Abfrageerstellung berücksichtigen zu können.

Nun, wie Sie das implementieren JPARepository Schnittstelle haben Sie zwei Möglichkeiten:

  • verwenden List<T> findAll(@Nullable Specification<T> spec); zur Verfügung gestellt von der JpaSpecificationExecutor Schnittstelle, die Sie auch in Ihrem benutzerdefinierten Repository implementieren können.

  • Bereichern Sie die JPARepository mit Ihrer eigenen Schnittstelle, die eine Methode definiert findAll() und das nimmt als Parameter ein Objekt, das Werte für die Forschung enthält.
    Dann erstellen Sie eine konkrete Klasse, die implementiert werden soll JPARepository.
    Du hättest also die Möglichkeit, das zu spritzen EntityManager und das zu benutzen Criteria API.