【发布时间】: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 开发人员上运行传递参数
标签: spring oracle spring-boot hibernate spring-data-jpa