【问题标题】:Spring Data JPA: Having trouble combining native query with parameterSpring Data JPA:将本机查询与参数结合起来时遇到问题
【发布时间】:2020-04-11 11:01:48
【问题描述】:

我的存储库是这样定义的:

@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:参数绑定的名称不能为空或空!在 JDKs

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

【问题讨论】:

    标签: java spring hibernate java-8 spring-data


    【解决方案1】:

    您可以简单地重构代码以使用命名参数。不管是原生查询还是 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);
    

    【讨论】:

    • 工作就像一个魅力!谢谢。
    • @user1660256 没问题,考虑支持/标记为正确;>
    • 我试过了,但 SO 让我再等 3 分钟。哈哈。并留意我的后续问题!
    • @user1660256 投票没有时间限制 ;)
    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2019-03-01
    • 2012-09-13
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多