1

我正在处理一个“不可更改”的遗留代码(无法移动到标准 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))以及设置firstmax结果。SQLQuery query
  • 调用时出错query.list()(使用 intellij evaluate expression

不应该query.list()返回一个空的结果?

可能的答案(在这种情况下):

看起来FirstResult查询设置会导致该问题,因为 - 错误地 - 它是一个负数。

4

1 回答 1

0

您如何执行 SQL 然后访问结果?

听起来在使用mileage参数执行 SQL 时没有结果,并且您无论如何都试图读取结果。

尝试立即在数据库上运行生成的 SQL 并查看它是否返回任何行。

于 2018-02-02T21:07:56.127 回答