【问题标题】:Hibernate native sql query exception - rs cursor forward onlyHibernate 本机 sql 查询异常 - rs cursor forward only
【发布时间】:2018-07-13 09:28:16
【问题描述】:

我正在处理一个“不可更改”的遗留代码(无法移动到标准 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 参数是可选的,所以它以上面介绍的奇怪方式完成。 问题是同时提供phrasemileage,它不断给我以下错误:java.sql.SQLException: ResultSet may only be accessed in a forward direction.。它在没有提供mileage 参数的情况下工作。为什么我会收到此错误?

已编辑:

  • 在 db 上运行此查询没有结果。
  • 我正在使用query.setResultTransformer(Transformers.aliasToBean(type)) 并在我的SQLQuery query 对象上设置firstmax 结果。
  • 调用query.list()时出错(使用intellij evaluate expression

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

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

在查询中设置 FirstResult 似乎会导致该问题,因为 - 错误地 - 它是一个负数。

【问题讨论】:

  • 您的 SQL 有 LIKE 关键字和 mileage 此处为 MILEAGE LIKE :mileage,但您没有像使用 phrase 那样指定 %。是故意的吗?
  • 是的,它是——因为我希望它要么完美匹配,要么不完美。

标签: java hibernate hibernate-native-query


【解决方案1】:

您是如何执行 SQL 并访问结果的?

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

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

【讨论】:

  • 你是对的。在 db 上执行该查询时没有返回行。错误是当我调用list() 时:query.list()。我在那条线上设置了调试器并使用了 intellij Evaluate expression,它给了我这个异常。它不应该返回空集合吗?
猜你喜欢
  • 2015-03-10
  • 2020-06-29
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多