And*_*kyi 15 jpa jpql java-8 spring-data-jpa
在我的@Repository接口中,我使用包含参数(addressType)的JPQL @Query创建了自定义查找方法.
from Address a where a.addressType = :addressType
在方法中,我没有在参数上指定@Param("addressType").所以我得到了
java.lang.IllegalArgumentException:参数绑定的名称不能为null或为空!对于命名参数,您需要在Java版本<8上使用@Param作为查询方法参数.
好的,这很清楚,但我使用的是Java 8.那么Java 8的特殊之处在哪里呢?
JB *_*zet 12
在Java 8中,您可以使用反射来访问方法的参数名称.这使得@Param注释变得不必要,因为Spring可以从方法参数的名称中推断出JPQL参数的名称.
但是您需要使用-parameters编译器的标志来获取该信息.
请参阅http://docs.oracle.com/javase/tutorial/reflect/member/methodparameterreflection.html.
Xtr*_*ica 10
@JB Nizet给出的答案是正确的,但我只是想指出-parameters在使用Eclipse时为Java 8编译器添加标志的方法.这是在Window - > Preferences中:
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12315 次 |
| 最近记录: |