繁体   English   中英

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

[英]Using Named Parameter in native SQL query with Spring Data JPA

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

我研究过: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();
}

[ERROR]~2019-09-19-07.26.30.347CDT~~~~~ oac.c.C.[.[.[.[dispatcherServlet] Servlet.service() for servlet [dispatcherServlet] in context with path []抛出异常[请求处理失败; 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound: COL; 嵌套异常是 org.hibernate.QueryException:未绑定命名参数:COL] 根本原因是 org.hibernate.QueryException:未绑定命名参数:COL

您在查询中使用变量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 数据文档

@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

暂无
暂无

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

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