Java 使用Maven运行Spring启动应用程序时出错:参数绑定的名称不能为null

Java 使用Maven运行Spring启动应用程序时出错:参数绑定的名称不能为null,java,spring,maven,spring-boot,Java,Spring,Maven,Spring Boot,我使用Spring boot 1.5.12和Java 8的Spring boot应用程序在我的开发环境中执行得非常好,但在部署到测试环境时,我面临着一些困难: 我使用:mvn spring boot:run启动应用程序,执行会因错误而停止: java.lang.IllegalArgumentException: Name for parameter binding must not be null or empty! On JDKs < 8, you need to use @Param

我使用Spring boot 1.5.12和Java 8的Spring boot应用程序在我的开发环境中执行得非常好,但在部署到测试环境时,我面临着一些困难:

我使用:mvn spring boot:run启动应用程序,执行会因错误而停止:

java.lang.IllegalArgumentException: Name for parameter binding must not be null or empty! On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters.
java.lang.IllegalArgumentException:参数绑定的名称不能为null或空!在JDK<8上,您需要使用@Param作为命名参数,在JDK 8或更高版本上,请确保使用-parameters进行编译。
我做了一些搜索,了解到为了让我的存储库方法正常工作,比如:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {

    @Query("SELECT u FROM User u WHERE u.primaryEmail.emailAddress = :emailAddress "
            + "AND u.deleted = 0")
    Optional<User> findByPrimaryEmailAddress(String emailAddress);
@RepositoryRestResource(collectionResourceRel=“users”,path=“users”)
公共接口UserRepository扩展了JpaRepository、UserRepositoryCustom{
@查询(“从用户u中选择u,其中u.primaryEmail.emailAddress=:emailAddress”
+“和u.deleted=0”)
可选findByPrimaryEmailAddress(字符串emailAddress);
我需要使用“-parameters”选项进行编译,因为我没有将@Param注释放在参数“emailAddress”上

它在Eclipse中工作,因为编译器有一个激活的选项,但是当我在Eclipse之外使用maven编译应用程序时,必须设置该选项

我的问题是,因为我在pom.xml中使用了默认的spring boot maven插件

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>

org.springframework.boot
在github上,我无法在1.5.12版本上看到

<parameters>true</parameters>
true
你知道我如何解决我的问题吗

我将尝试用带“-parameters”编译器arg的maven编译器插件替换springbootmaven插件,但是如果我可以使用默认的springbootmaven插件,我会更有信心


谢谢!

您需要emailAddress的参数,jpql无法理解给出了什么参数

Optional<User> findByPrimaryEmailAddress(@Param("emailAddress") String emailAddress);
可选findByPrimaryEmailAddress(@Param(“emailAddress”)字符串emailAddress);
试一试!

我认为spring boot maven插件中的“-parameters”选项可能是最近添加的,并且文档对spring boot 1.5.12不正确(可能是对spring boot 2.0.0)

我通过配置maven编译器解决了这个问题:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <compilerArgs>
                <arg>-parameters</arg>
            </compilerArgs>
        </configuration>
    </plugin>

maven编译器插件
${java.version}
${java.version}
-参数

重要提示:必须设置“-parameters”参数实际上,Spring数据提供了一种通过读取参数名称来避免“@Param”注释的方法。使用Java 8和“-parameters”编译标志是可能的。