Java Spring数据JPA:无法将本机查询与参数组合

Java Spring数据JPA:无法将本机查询与参数组合,java,spring,hibernate,java-8,spring-data,Java,Spring,Hibernate,Java 8,Spring Data,我的存储库定义如下: @Repository public interface RefreshJobDetailRepository extends JpaRepository<RefreshJobDetailEntity, Long> { @Query(nativeQuery = true, value = NATIVE_SUMMARY_QUERY_PARTIAL + " WHERE rjd.refresh_job_identifier = ?1" +

我的存储库定义如下:

@Repository
public interface RefreshJobDetailRepository extends JpaRepository<RefreshJobDetailEntity, Long> {

    @Query(nativeQuery = true, value = NATIVE_SUMMARY_QUERY_PARTIAL + " WHERE rjd.refresh_job_identifier = ?1" +
            " group by (rjd.refresh_job_identifier)) as rc")
    RefreshSummary getRefreshJobDetailSummaryById(String refreshJobId);

    interface RefreshSummary {
        // getters
    }

    String NATIVE_SUMMARY_QUERY_PARTIAL = "select ...";
}
@存储库
公共接口RefreshJobDetailRepository扩展了JpaRepository{
@查询(nativeQuery=true,value=NATIVE\u SUMMARY\u Query\u PARTIAL+“其中rjd.refresh\u job\u identifier=?1”+
“分组依据(rjd.refresh\u作业\u标识符))为rc”)
RefreshSummary getRefreshJobDetailSummaryById(字符串refreshJobId);
界面刷新摘要{
//吸气剂
}
字符串NATIVE_SUMMARY_QUERY_PARTIAL=“选择…”;
}
运行此操作时,会出现以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException:参数绑定的名称不能为null或空!在JDK<8上,您需要使用@Param作为命名参数,在JDK 8或更好的版本上,请确保使用-parameters编译。;嵌套异常为java.lang.IllegalArgumentException:参数绑定的名称不能为null或空!在JDK<8上,您需要使用@Param作为命名参数,在JDK 8或更高版本上,请确保使用-parameters进行编译


让我困惑的是,我没有使用“命名参数”。这是一个位置参数。那么这个错误告诉了我什么呢?我们在代码的其他地方使用位置参数,并且没有设置
-parameters
标志,但这是唯一的本机查询。不知道这会不会有什么不同?顺便说一句,数据库是Postgresql。

您可以简单地重构代码以使用命名参数。无论是本机查询还是jpql:

@Query(nativeQuery = true, value = NATIVE_SUMMARY_QUERY_PARTIAL + " WHERE rjd.refresh_job_identifier = :refreshJobId" +
        " group by (rjd.refresh_job_identifier)) as rc")
RefreshSummary getRefreshJobDetailSummaryById(@Param("refreshJobId") String refreshJobId);

您可以简单地重构代码以使用命名参数。无论是本机查询还是jpql:

@Query(nativeQuery = true, value = NATIVE_SUMMARY_QUERY_PARTIAL + " WHERE rjd.refresh_job_identifier = :refreshJobId" +
        " group by (rjd.refresh_job_identifier)) as rc")
RefreshSummary getRefreshJobDetailSummaryById(@Param("refreshJobId") String refreshJobId);

工作得很有魅力!谢谢。@ USE1660256没有问题,考虑投票/标记是正确的;我试过了,但也让我再等3分钟。哈哈。还有,请注意我的后续问题@user1660256向上投票没有时间限制;)工作得很有魅力!谢谢。@ USE1660256没有问题,考虑投票/标记是正确的;我试过了,但也让我再等3分钟。哈哈。还有,请注意我的后续问题@user1660256向上投票没有时间限制;)