Spring DATA JPA 传递两个参数 - 无法提取 ResultSet;SQL [n/a]; org.hibernate.exception.SQLGrammerException:无法提取结
Posted
技术标签:
【中文标题】Spring DATA JPA 传递两个参数 - 无法提取 ResultSet;SQL [n/a]; org.hibernate.exception.SQLGrammerException:无法提取结果集【英文标题】:Spring DATA JPA Passing two parameters -could not extract ResultSet;SQL [n/a]; org.hibernate.exception.SQLGrammerException:could not extract ResultSet 【发布时间】:2021-11-10 18:47:01 【问题描述】:我已经编写了以下 Spring Data JPA 原生查询。
@Query(value = "SELECT ID, REFERENCE FROM ORDER_MATCH where ORDER_REF IN :orderRef AND STATUS = :status", nativeQuery = true)
List<Object[]> retriveData(List<String> orderRef, String status);
这段代码给了我以下错误。
SQL Error : 936, SQLState : 42000
ORA-00936 : missing expression
org.springframework.dao.InvalidDataAccessResourceUsageException : could not extract ResultSet; SQL[n/a]; nested exception is org.hibernate.exception.SQLGrammerException: could not extract ResultSet
但是,如果我删除了一个参数,则代码可以正常工作,例如,以下两种组合可以正常工作,当我有两个参数时会出现问题,任何人都可以帮助我确定这里出了什么问题。非常感谢您。
一个参数的工作组合
@Query(value = "SELECT ID, REFERENCE FROM ORDER_MATCH where ORDER_REF IN :orderRef" , nativeQuery = true)
List<Object[]> retriveData(List<String> orderRef);
@Query(value = "SELECT ID, REFERENCE FROM ORDER_MATCH where STATUS = :status", nativeQuery = true)
List<Object[]> retriveData(String status);
只是为了添加更多细节,我使用了 :?传递参数的方式,它也会导致同样的错误
@Query(value = "SELECT ID, REFERENCE FROM ORDER_MATCH where ORDER_REF IN (?1) AND STATUS = ?2", nativeQuery = true)
List<Object[]> retriveData(List<String> orderRef, String status);
【问题讨论】:
您是否尝试过记录实际生成的 SQL 查询? 是的,我做到了,这是非常好的 sql 查询,我可以在 SQL 开发人员上运行传递参数 【参考方案1】:试试这样的:
@Query(value = "SELECT ID, REFERENCE FROM ORDER_MATCH where ORDER_REF IN :orderRef AND STATUS = :status", nativeQuery = true)
List<Object[]> retriveData(@Param("orderRef") List<String> orderRef, @Param("status") String status);
还请注意,正如hibernate documentation 中所述:
值列表可以来自许多不同的来源。在
constructor_expression
和collection_valued_input_parameter
中,值列表不能为空;它必须包含至少一个值。
【讨论】:
你是完全正确的,值列表没有值,因此导致了这个问题......以上是关于Spring DATA JPA 传递两个参数 - 无法提取 ResultSet;SQL [n/a]; org.hibernate.exception.SQLGrammerException:无法提取结的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data JPA - 使用 REST 调用上的查询参数从方法名称生成查询