我正在处理一个不可更改的遗留代码' (无法移动到标准api)我有一些适当的参数绑定的麻烦。查询看起来像这样(MS SQL
):
SELECT BRAND AS b FROM CAR WHERE (NAME LIKE :phrase OR MODEL LIKE :phrase ) AND AGE NOT IN(1997, 1998) AND (:mileage IS NULL OR MILEAGE LIKE :mileage) ORDER BY BRAND
(...)
query.setParameter("phrase", "%" + phrase + "%");
query.setParameter("mileage", mileage);
phrase
实际上是必需的,但因为mileage
参数是可选的,所以它以上面提到的方式完成。
问题是,如果同时提供phrase
和mileage
,它会不断给我以下错误:java.sql.SQLException: ResultSet may only be accessed in a forward direction.
。它可以提供mileage
参数。为什么我收到此错误?
编辑:
query.setResultTransformer(Transformers.aliasToBean(type))
以及在first
对象上设置max
和SQLQuery query
结果。query.list()
(使用intellij evaluate expression
)不应该query.list()
返回空结果吗?
可能的答案(在这种情况下):
看起来在查询上设置FirstResult
会导致该问题,因为 - 错误地 - 它是一个负数。
答案 0 :(得分:0)
您如何执行SQL然后访问结果?
听起来使用mileage
参数执行SQL时没有结果,而且无论如何你都试图读取结果。
尝试立即在数据库上运行生成的SQL,看看它是否返回任何行。