Kann ich eine @Query-Definition mit einer Spezifikation in einer Spring Data JPA-Repository-Methode kombinieren?

Lesezeit: 2 Minuten

Benutzer-Avatar
woytech

Kann man beides verwenden @Query Annotation und Spezifikation in einer Repository-Methode? Zum Beispiel hätte ich gerne eine Methode wie diese:

@Query(value="SELECT e from EMPLOYEE where firstName <> ?1")
public Page<Employee> findEmployeeBySomethigFancy(String firstName, Pageable pageable, Specification<Employee> emp);

Ist es möglich oder sollte ich die gesamte Abfrage als Predicate und entfernen Sie die @Query Anmerkung?

Benutzer-Avatar
Vlad Mihalcea

Als erstes sollten Sie dies lesen Blogbeitrag zum Frühling.

Zweitens, nach der JpaSpecificationExecutor Schnittstelle, die Ihre Repositories implementieren sollen, nehmen Sie die folgende Methode ein Specification Streit:

  • count(Specification<T> spec)
  • List<T> findAll(Specification<T> spec)
  • Page<T> findAll(Specification<T> spec, Pageable pageable)
  • List<T> findAll(Specification<T> spec, Sort sort)
  • T findOne(Specification<T> spec)

Sie können also nicht a mischen @Query Definition mit a Specification.

Da kann man das aber ausdrücken firstName <> ?1 Bedingung mit a Specification und da Sie beliebig viele Spezifikationen kombinieren können, können Sie das Ganze umschreiben @Query verwenden Specification(s) nur.

  • Vielen Dank für Ihre Antwort! Ich weiß, dass ich so viele Spezifikationen kombinieren kann, wie ich möchte, aber ich habe ein paar Methoden mit @Anfrage Anmerkung und jetzt muss ich die Spezifikation verwenden, also muss ich vorhandene Abfragen für die Objekte der Spezifikation umschreiben. Ich dachte, dass es vielleicht eine Möglichkeit gibt, irgendwie zu kombinieren @Anfrage und Spezifikation.

    – woytech

    15. Oktober 2014 um 21:27 Uhr


  • Aus Sicht des API-Implementierers ist es viel einfacher, diese Bedenken zu trennen und spezifische Abfragemöglichkeiten anzubieten. Ihre Kombination könnte die Implementierung noch weiter verkomplizieren.

    – Vlad Mihalcea

    16. Oktober 2014 um 9:33 Uhr

  • Dieses Thema ist erstaunlich, ich muss eine Viele-zu-Viele-Verknüpfung für eine JPA-Abfragemethode durchführen und ich übergebe eine Spezifikation und ein auslagerbares Element. Sicherlich kann die @Query nicht damit gemischt werden (ich habe es getestet). Und das bringt keine Antworten auf meinen Kelch. Ich weiß nicht, wie ich es schaffen soll, dass meine Abfrage einer Beziehungstabelle entspricht und meine Spezifikations- und Pageable-Elemente beibehalten werden 🙁

    – Alex

    7. Dezember 2015 um 18:02 Uhr

  • @Alex Hast du eine Lösung für dein Anliegen gefunden? Da ich eine ähnliche Situation habe, kann ich Abfrage und Spezifikation nicht kombinieren. Bitte helfen Sie uns, wenn Sie eine Lösung haben.

    – Anshul Kabra

    26. August 2019 um 10:14 Uhr

  • @AnshulKabra es ist sehr lange her, aber ich kann mich erinnern, dass ich QueryBuilder und CriteriaAPI verwendet habe, um mein JpaRepository zu erweitern und die Abfrage von Hand zu implementieren. Wenn ich Pageable und Specification erhalte, erstelle ich die gesamte Abfrage und das Seitenelement.

    – Alex

    26. August 2019 um 13:54 Uhr

1014270cookie-checkKann ich eine @Query-Definition mit einer Spezifikation in einer Spring Data JPA-Repository-Methode kombinieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy