【发布时间】: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 参数是可选的,所以它以上面介绍的奇怪方式完成。
问题是同时提供phrase 和mileage,它不断给我以下错误:java.sql.SQLException: ResultSet may only be accessed in a forward direction.。它在没有提供mileage 参数的情况下工作。为什么我会收到此错误?
已编辑:
- 在 db 上运行此查询没有结果。
- 我正在使用
query.setResultTransformer(Transformers.aliasToBean(type))并在我的SQLQuery query对象上设置first和max结果。 - 调用
query.list()时出错(使用intellijevaluate expression)
query.list() 不应该返回一个空结果吗?
可能的答案(在这种情况下):
在查询中设置 FirstResult 似乎会导致该问题,因为 - 错误地 - 它是一个负数。
【问题讨论】:
-
您的 SQL 有
LIKE关键字和mileage此处为MILEAGE LIKE :mileage,但您没有像使用phrase那样指定%。是故意的吗? -
是的,它是——因为我希望它要么完美匹配,要么不完美。
标签: java hibernate hibernate-native-query