2

给出了以下查询以针对 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();
}

[错误]~2019-09-19-07.26.30.347CDT~~~~~ oaccC[.[.[.[dispatcherServlet] Servlet.service() for servlet [dispatcherServlet] 在路径 [] 的上下文中抛出异常 [请求处理失败的; 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : COL; 嵌套异常是 org.hibernate.QueryException:命名参数未绑定:COL] 根本原因 org.hibernate.QueryException:命名参数未绑定:COL

4

2 回答 2

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();

至:

@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

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

于 2019-09-19T14:30:29.497 回答
0

@Wallwalker,这里您需要使用@Param 注解按预期在查询方法中传递参数。

带有 PostgreSql 的 Spring-JPA: 有时此错误要求强制转换字段,如果不匹配则显示。

nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : text;

因此,您需要显式转换。例如

age::integer=20
OR
CAST('2020-12-22' as DATE)
OR
mob_col1::text=substr(mob_array_col1::text, 1, 10) 
OR
cast(mob_col1 as text)=substr(cast(mob_array_col1 as text), 1, 10)

参考: PostgreSql-substr

于 2020-09-29T11:03:35.580 回答