qq_33468377 2016-06-02 08:15 采纳率: 0%
浏览 1757

hibernate JPA执行sql文中的where条件里使用COLLATE不起作用

项目环境:j2ee + hibernate JPA, DB:sqlserver 2012
执行的sql文:select * from table1 where filed1 > '3' COLLATE SQL_EBCDIC037_CP1_CS_AS;

问题是上面的Sql文在sqlserver查询器里正常执行,检索到的数据都是filed1字段第一位大于3的数据,不包第一位是a~z字母的数据,而在hibernate里执行不但把第一位大于3的数据检索出来了,还把第一位是a~z字母的数据也检索出来了

问题补充COLLATE SQL_EBCDIC037_CP1_CS_AS是指按照SQL_EBCDIC037_CP1_CS_AS排序,也就是说字母a~z是小于0~9的

现在找到了一种解决方案:就是在查询变量设定的时候不使用query.setParameter,而是直接将变量值拼进查询sql文中就是正常的,可是这样就会有sql注入的问题
还有就是不明白为什么这样改就是OK的?请高手指教下!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示