Sqlserver order by 分页问题(已解决)

SqlServerDialect 中未替换Order by语句导致报错,需要将replaceOrderBy方法重写

数据库版本:sqlserver 2014

已解决,参见评论一楼

评论区

JFinal

2017-02-17 10:43

创建一个 public class MySqlServerDialect extends SqlServerDialect,然后覆盖一下 replaceOrderBy 方法,将 order by 的替换用上,相关代码在源码中都有

JFinal

2017-02-17 10:44

或者你试试在最外层套一个 select *,形如:
paginate(1, 10, "select *", "from (原 sql ) as temp", ....)

伊森

2017-02-17 10:56

@JFinal 谢谢回复,现在用的第一种方法,只是个人建议在版本里修复一下或者在手册中写一下,方便初学者,不过瑕不掩瑜,Jfinal还是很好用。

JFinal

2017-02-17 11:04

@伊森 这个问题其实相当纠结,因为用正则去 replace 掉 order by 语句块无法预料到有些极其复杂的 order by 形式,所以后来这个去掉了,但没想到 sql server 不允许 select count 语句出现 order by

伊森

2017-02-17 11:13

@JFinal 确实根据业务不同会引申出复杂的Sql,从框架的角度想来直接把Exception抛出,让用户自己去根据自己的业务写replaceOrderBy确实已经是好的解决方案了,只是现在用的人都希望无脑,会显得框架不够友好

cfrjxia

2017-02-20 11:21

@JFinal 我同样遇到了这个问题. 请问您说的1. "将 order by 的替换用上"是指什么? 2. "相关代码在源码中都有", 这里说的源码是指码云上的jfinal-master分支吗?
刚接触jfinal,不太懂, 谢谢

JFinal

2017-02-20 11:33

@cfrjxia 将 order by 的替换用上是指 jfinal 2.2 版本中的 replaceOrderBy 中存在的,但在 jfinal 3.0 中被注释掉的代码,这段代码没有删,仅是注释了而已

热门反馈

扫码入社