rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » JavaEE

Hibernate中ordinal parameter mismatch的BUG

问题 最近在调整hql语句时,发生一个莫名其妙的问题,hql语句如下:"from Bill where dataDate?=? and callerNumber like ?”;如此简单的一条语句,在执行时却报了一个“ordinal parameter mismatch;”异常。奇哉怪哉,把callerNumber条件放到最前面却是好的:“from Bill where callerNumber like ? and dataDate?=?”。
原因
经多方查证,原来是call这个字符串惹的祸。在org.hibernate.engine.query.ParameterParser源码类中有下列一段代码:
public static void parse(String sqlString, Recognizer recognizer) throws QueryException{
    boolean hasMainOutputParameter = sqlString.indexOf( "call" ) > 0 &&
                                   sqlString.indexOf( "?" ) < sqlString.indexOf( "call" ) &&
                                   sqlString.indexOf( "=" ) < sqlString.indexOf( "call" );
    ......
} 把callNumber中的call当作是存储过程的call关键字了!
解决    1. 将带有call字样的字段放到查询条件最前面
   2. 用Criteria替代hql
顶一下
(0)
踩一下
(0)