我正在处理“不可更改”的遗留代码(无法移动到标准 api),并且在正确的参数绑定(bind)方面遇到了一些麻烦。查询如下所示 (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 只能以正向访问。
。它可以在没有提供mileage
参数的情况下工作。为什么我会收到此错误?
编辑:
- 在数据库上运行此查询没有结果。
- 我正在使用
query.setResultTransformer(Transformers.aliasToBean(type))
以及在我的SQLQuery 查询
对象上设置first
和max
结果。 - 调用
query.list()
时出错(使用 intellij评估表达式
)
query.list()
不应该返回空结果吗?
可能的答案(在这种情况下):
看起来在查询上设置 FirstResult
会导致该问题,因为 - 错误地 - 它是一个负数。
最佳答案
您如何执行 SQL 然后访问结果?
听起来使用 mileage
参数执行 SQL 时没有结果,但您无论如何都在尝试读取结果。
尝试立即在数据库上运行生成的 SQL,看看它是否返回任何行。
关于java - Hibernate native sql查询异常 - rs游标仅向前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590135/