我正在处理一个“不可更改”的遗留代码(无法移动到标准 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
提供参数的情况下工作。为什么我收到此错误?
编辑:
- 在 db 上运行此查询没有结果。
- 我在我的对象上使用
query.setResultTransformer(Transformers.aliasToBean(type))
以及设置first
和max
结果。SQLQuery query
- 调用时出错
query.list()
(使用 intellijevaluate expression
)
不应该query.list()
返回一个空的结果?
可能的答案(在这种情况下):
看起来FirstResult
查询设置会导致该问题,因为 - 错误地 - 它是一个负数。