Java 8 Spring Данные JPA Связывание параметров
В моем интерфейсе @Repository я создал собственный метод поиска с JPQL @Query, который содержит параметр (addressType).
from Address a where a.addressType = :addressType
В методе я не указывал @Param ( "addressType" ) в параметре. Поэтому я получаю
java.lang.IllegalArgumentException: Имя для привязки параметров не должно быть пустым или пустым! Для именованных параметров вам необходимо использовать @Param для параметров метода запроса в версиях Java < 8.
Хорошо, это довольно ясно, но я использую Java 8. Итак, что здесь особенного в Java 8?
Ответы
Ответ 1
В Java 8 вы можете использовать отражение для доступа к именам параметров методов. Это делает ненужным аннотацию @Param
, так как Spring может вывести имя параметра JPQL из имени параметра метода.
Но вам нужно использовать флаг -parameters
с компилятором, чтобы иметь доступную информацию.
См. http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html.
Ответ 2
Ответ @JB Nizet верен, но я просто хотел указать способ добавить флаг -parameters
для компилятора Java 8 при использовании Eclipse. Это находится в окне → Настройки:
![введите описание изображения здесь]()
Maven также позволяет добавлять флаги в сам pom:
<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>