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>