Spring Data JPA:在将本机查询与参数组合时遇到问题



我的仓库是这样定义的:

@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 ...";
}

当我运行这个时,我得到以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException:参数绑定的名称不得为空或空!在 JDK <8 上,命名参数需要使用 @Param,在 JDK 8 或更好的版本上,一定要使用 -parameters 进行编译。嵌套异常是java.lang.IllegalArgumentException:参数绑定的名称不能为空或空!在 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);

最新更新