繁体   English   中英

Spring Data JPA:无法将本机查询与参数结合使用

[英]Spring Data JPA: Having trouble combining native query with parameter

我的存储库定义如下:

@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:参数绑定的名称不能为 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM