2015-01-01 13 views
12

In meiner @ Repository-Schnittstelle habe ich benutzerdefinierte Suchmethode mit JPQL @Query, die Parameter (addressType) enthält erstellt.Java 8 Spring Data JPA Parameterbindung

from Address a where a.addressType = :addressType

Bei dem Verfahren habe ich nicht @param ("address") auf dem Parameter angeben. So bekomme ich

java.lang.IllegalArgumentException: Name für Parameter verbindlich darf nicht null oder leer sein! Für benannte Parameter müssen Sie @param für die Suche nach Methodenparameter auf Java-Versionen < 8.

Okay, das ziemlich klar, aber ich bin mit Java 8. So verwenden, was über Java 8 hier besonders?

+0

Sanitäter haben Sie ausgelassen "SELECT a" aus dem JPQL Abfrage, so es ist jetzt illegal. –

Antwort

11

In Java 8 können Sie mit Reflection auf die Namen von Parametern von Methoden zugreifen. Dies macht die Annotation @Param unnötig, da Spring den Namen des JPQL-Parameters aus dem Namen des Methodenparameters ableiten kann.

Aber Sie müssen das -parameters Flag mit dem Compiler verwenden, um diese Informationen verfügbar zu haben.

Siehe http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html.

+1

Danke für die Antwort. Aber ich benutze Java8 und SpringData fragt mich immer noch nach der @Param Annotation. –

+3

Haben Sie Ihre Klassen mit der Option -parameters kompiliert, wie auf der Seite erklärt, mit der ich verlinkt bin? –

+0

Nein, ich habe das nicht versucht, ich entschied mich nur für @Param Annotation, da Code ohne spezielle Kompilierungskonfiguration nicht funktioniert. Aber dieser Kommentar erklärt, was Sie in Ihrer Hauptantwort gemeint haben. Vielen Dank! –

7

Die Antwort von @JB Nizet ist korrekt, aber ich wollte nur den Weg zeigen, die -parameters Flag für den Java 8 Compiler bei der Verwendung von Eclipse hinzuzufügen. Dies ist in Window -> Einstellungen:

enter image description here

Maven erlaubt auch die Flaggen in der pom Zugabe selbst:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.5.1</version> 
    <configuration> 
     <compilerArgs> 
      <arg>-verbose</arg> 
      <arg>-parameters</arg> 
     </compilerArgs> 
    </configuration> 
</plugin> 
+0

Arbeitet es mit Spring Data? – Alex78191

Verwandte Themen