今天发现一个奇怪的问题,客户的web应用日志中有一个错误信息
[2024-08-06 17:31:50] org.hibernate.hql.internal.ast.ErrorTracker.reportError(ErrorTracker.java:57)
<ERROR> line 1:361: unexpected token: order
检查了报错信息后,代码中确实有两个order by
order by o.createDate desc order by o.loginDate asc
但是全局搜索代码后,并未发现后一个排序order by o.loginDate asc
是从哪里出现的
于是跟了一下hibernate的query方法,在底层代码中,发现
原来,是这句hql += " order by o." + pageParams.getSort() + " " + pageParams.getOrder();
,系统会默认将前台传入的排序参数,添加到sql语句中,而前端的话,在分页参数中插入了用户点击的表单排序。
结束