wake-up-neo.com

Erhalten Sie in den Spring Data JpaRepository-Schnittstellen in STS 3.1 überall den Fehler "Ungültige abgeleitete Abfrage"

Wir haben unsere Repositories genau wie in der Spring Data-Dokumentation beschrieben implementiert. Alles war in Ordnung, bis wir von STS 2.9 auf STS 3.1 aufgerüstet wurden. Alle Versuche, diese Fehler zum Verschwinden zu bringen, sind fehlgeschlagen und in manchen Fällen auch nicht sinnvoll! Sie stimmen mit keiner Eigenschaft in der Oberfläche oder den verwendeten Entitäten überein!

Hier ist ein Beispiel:

public interface CreditNotesRepository extends JpaRepository<CreditNotes, Long> {

    CreditNotes findCurrentCreditNotes(Long shipmentDetailId);
}

Die Variable findCurrentCreditNotes ist eine benannte Abfrage in unserer Entität. Dieser Code wird einwandfrei ausgeführt.

@NamedQueries({
    @NamedQuery(name = "CreditNotes.getCount", query = "SELECT COUNT(f) FROM CreditNotes f"),
    @NamedQuery(name = "CreditNotes.findCurrentCreditNotes", query =
        "SELECT creditNotes FROM CreditNotes creditNotes"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = ?1 "
        + " AND creditNotes.notesSeqNumber =  (SELECT max(creditNotes2.notesSeqNumber) FROM CreditNotes creditNotes2"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = creditNotes2.shipmentDetail.shipmentDetailId)")
})

Und den Fehler bekommen wir:

Invalid derived query! No property find found for type ca.cole.freight.model.CreditNotes

Obwohl dies nur eine Flagge ist (wirkt sich nicht auf die Kompilierung aus), ist es ärgerlich und verwirrend. Kann jemand etwas Licht auf dieses werfen? Und erkläre es mir, als wäre ich 6 Jahre alt! ;)

19
skel625

Es ist ein IDE Fehler, der im folgenden Beitrag erläutert wird:

http://forum.springsource.org/showthread.php?138585-Invalid-derived-query!-No-immobilien-delete-found-for-type-Java-lang-Object

In der Zwischenzeit können Sie die Validierung in preferences/spring/project validators/Data validatordeaktivieren. _ Uncheck ungültige abgeleitete Abfrage und STS wirft den Marker nicht mehr.

24
Grubhart

Auf dem post des Spring Forum gab das Spring Team dies bekannt 

Es ist bereits für STS 3.3.0 festgelegt

Ich habe diese Version noch nicht überprüft. Aber ich verwende 3.5.0.RELEASE und das Problem kommt zurück! Mein Fix ist das Deaktivieren von Ungültige abgeleitete Abfrage

Invalid Derived Query

28
Tuan Dang

Es gibt auch eine Problemumgehung dafür. Fügen Sie @Query-Annotation zu Ihrer Methodendefinition in Ihrem Repository hinzu, ohne dass eine JPQL/SQL-Abfrage definiert ist. 

Hier ist ein Beispiel:

@Query
List<OwnerModel> findByFirstNameAndAgeNotZero(@Param(value = "firstName") String firstName);

In diesem Fall wird die benannte Abfrage OrderModel.findByFirstNameAndAgeNotZero verwendet. Ihr Eclipse-Fehler Invalid derived query sollte ebenfalls verschwinden, ohne dass die Validierung deaktiviert werden muss, wie von @Tuan Dang beschrieben

Wird in Eclipse 4.5.1 überprüft, wobei Spring-Plugin für @NamedQuery und @NamedNativeQuery installiert ist.

11
Paweł Dulęba

Ich habe das gerade selbst durchgemacht. Leider hat sich die Implementierung von Spring Data zwischen 1.1 und 1.2 geändert. Die <repository>-XML-Deklaration wird nicht mehr unterstützt. Sie können ein benutzerdefiniertes Postfix einrichten, erwartet jedoch standardmäßig eine Bean mit dem Klassennamen <InterfaceName>Impl. Wenn die Implementierung des benutzerdefinierten Repositorys nicht gefunden wird, werden Fehler wie der angezeigte angezeigt. Es wird versucht, Methoden zum Abfragen von Objekten basierend auf den Namen der Methoden in Ihrer Schnittstelle zu erstellen.

Eine Alternative besteht darin, Ihre Spring Data-Version auf 1.1 zu reduzieren und in Ihrem XML eine Schemalage von http://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsd anzugeben.

0
Apropos