template()中的sql加了/*+ ...*/这种语法无效?

因为用了阿里云的数据库,查询参数条件限制不能超过256个,

否则需要在sql语句前面加/*+ MAX_WHERE_ITEMS_COUNT=512*/这种语法。


但问题是:用jfinal的template(),将sql语句前加上/*+ MAX_WHERE_ITEMS_COUNT=512*/无效。

同样sql语句在数据库中直接查询时生效的。


是不是模板自动将这行代码当成注释去掉了?要如何设置这这种语句不会被去掉?



评论区

杜福忠

2025-05-29 11:53

没有处理,可能是Druid拦截了。可以用Db.find方法直接传入sql试试哪里被拦截了。
PS 阿里云数据库我记得默认是1G参数大小来着?还限制查询数量了啊,这个是第一次了解到。。。

liugz

2025-05-29 13:50

@杜福忠 用了阿里的云分析数据库,包括ID策略等很多问题。 感觉是jfinal有处理。测试了把sql放到templateByString()中执行是没问题的,但放template()执行就不生效了

JFinal

2025-05-29 14:19

@liugz enjoy 不会处理 /* */ , 注意 druid 较低版本对注释有要求,升级一下 druid 解决

liugz

2025-05-29 14:50

@JFinal druid目前用的1.2.23版本,算是较新版本了。那就不知道还有哪个环节的问题了

杜福忠

2025-05-29 23:44

@liugz templateByString 与 template文件取字符串的区别可能是回车符不一样,与编写有关。文件里面一般宽敞回车符就会产生回车,java里面写sql字符串拼接一般不会把回车符放入。 这个很好验证的,把他们的取值都打印出来看下就好了,或者debug进入看下取到的字符串就行,调试一下就找到问题

热门反馈

扫码入社