使用 Spring Data JPA 在本机 SQL 查询中使用命名参数

wal*_*ker 2 java sql db2 spring-data-jpa spring-boot

给出了以下查询以针对 DB2 数据库运行,但它在我的 Spring Boot 应用程序中返回以下错误。

我已经研究过:COL_1_1001应该是某种命名参数或宿主变量(DB2),但无法找到我正在尝试做的类似示例。我只曾经用来?1设置一个参数@Query,据我所知,它用于 JPQL。由于我在这里尝试本地 SQL 查询,因此不确定这是否可行。

@Repository 
public interface SomeRepository extends JpaRepository<Entity, EntityID> {

@Query(value="SELECT COL_1"
              + ",COL_2"
              + ",COL_3"
              + "FROM TABLE_A"
              + "WHERE COL_1 = :COL_1_1001", nativeQuery = true)
List<Entity> getEntityDetails();
}
Run Code Online (Sandbox Code Playgroud)

[ERROR]~2019-09-19-07.26.30.347CDT~~~~~ oaccC[.[.[.[dispatcherServlet] Servlet.service() for servlet [dispatcherServlet] in context with path [] 抛出异常 [Request processing]失败的; 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : COL; 嵌套异常是 org.hibernate.QueryException: Named parameter not bound : COL] 与根本原因 org.hibernate.QueryException: Named parameter not bound : COL

Pio*_*aza 5

COL_1_1001在查询中使用变量但不提供它。您必须添加一个带有注释的参数,@Param以便可以将值注入到查询中。

改变:

@Query(value="SELECT COL_1"
              + ",COL_2"
              + ",COL_3"
              + "FROM TABLE_A"
              + "WHERE COL_1 = :COL_1_1001", nativeQuery = true)
List<Entity> getEntityDetails();
Run Code Online (Sandbox Code Playgroud)

到:

@Query(value="SELECT COL_1"
              + ",COL_2"
              + ",COL_3"
              + "FROM TABLE_A"
              + "WHERE COL_1 = :col", nativeQuery = true)
List<Entity> getEntityDetails(@Param("col") String col); // it may not be a string - use the actual tyle of COL_1
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看Spring Data 文档