java - Spring 数据JPA : Having trouble combining native query with parameter

标签 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" +
            " 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: 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.; nested exception is 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.

令我困惑的是我没有使用“命名参数”。这是一个位置参数。那么这个错误告诉我什么?我们在代码中的其他位置使用位置参数,并且没有设置 -parameters 标志,但这是唯一的 native 查询。不知道这是否有影响?顺便说一句,数据库是 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);

关于java - Spring 数据JPA : Having trouble combining native query with parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59399706/

相关文章:

hibernate - 数据服务更新为HHH000346:托管刷新期间出错[null]

java - 无法创建 sessionFactory 对象.org.hibernate.HibernateException : could not init listeners

java - Java 中类型转换的隐式工作

java - 将 CSV 文件作为数据库表读入 Java

java - Spring RestTemplate 最适合发送一些数据并期望不返回的方法

spring cloud config目录结构

java - 将消息驱动 Bean 部署到 JBoss 服务器

java - 使用回收器在 android Studio 中获取 NullPointerException

java - apache httpclient 并生成一个将使用 java 共享 session 的浏览器

java - 如何在 jpa 中创建两列左连接?