@Repositoryインターフェースで、パラメーター(addressType)を含むJPQL @ Queryを使用してカスタム検索メソッドを作成しました。
from Address a where a.addressType = :addressType
このメソッドでは、パラメーターに@Param( "addressType")を指定しませんでした。だから私は得ています
Java.lang.IllegalArgumentException:パラメータバインディングの名前はnullまたは空であってはなりません!名前付きパラメーターの場合、Javaバージョン<8のクエリメソッドパラメーターに@Paramを使用する必要があります。
さて、これはかなり明確ですが、私はJava 8を使用しています。では、ここでJava 8の何が特別なのですか?
Java 8では、リフレクションを使用してメソッドのパラメーターの名前にアクセスできます。これにより、SpringはJPQLパラメーターの名前をの名前から推測できるため、@Param
アノテーションが不要になります。メソッドパラメータ。
ただし、その情報を利用できるようにするには、コンパイラで-parameters
フラグを使用する必要があります。
http://docs.Oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html を参照してください。
@JB Nizetの答えは正しいですが、Eclipseを使用するときにJava 8コンパイラーに-parameters
フラグを追加する方法を指摘したかっただけです。これはWindowにあります。 ->設定:
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>