以前在使用hibernate时出现的一个异常,记录一下:
Remember that ordinal parameters are 1-based!
在网上查找出现该问题的原因:hql 语句里不需要参数,却添加了一个参数,删除添加参数的语句就可以。
我这边的出现的原因:
hql.append("from UUsers where 1=1 ");
if (StringUtils.isNotBlank(userName)) {
hql.append(" and uname='" + userName+ "' );
}
hql.append(" order by uid ");
正确的应该是这样的,但是我当时是直接把 order by uid 直接写在了where 1=1 后面,当userName 为空时
可以正常查询,但是当不为空时,就会出现上面的异常。因为,order by 函数是在 where 条件之后对过滤
后的数据进行排序。
------------------------------------------
其他同样异常的代码示例:
hql.append("from UUsers where uname = '?' and upassword = '?' ");
这里HQL语句中的 ? 没有解析成占位符,当作字符串处理了。
正确格式:
hql.append("from UUsers where uname = ? and upassword = ? ");
------------------------------------------