zoukankan      html  css  js  c++  java
  • org.hibernate.HibernateException: ordinal parameter mismatch

    错误 org.hibernate.HibernateException: ordinal parameter mismatch 。

    我的错误是未将hql语句设置参数时的占位符去掉(粗糙流了下- -///)

    1 hql += " and bbs.id=? " + bbs.id;

    在这之前网上发现的另一种错误也很值得注意:在数据表中用了关键字“call” 作为数据字段,所以产生了这个问题。Hibernate报错如下:

     org.hibernate.HibernateException: ordinal parameter mismatch
     at org.hibernate.engine.query.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:225)
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:95)
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
     at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
     at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
     at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
     at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
      ......
     

     出错的原因是在org.hibernate.engine.query.ParameterParser类中有下列一段代码

    1 public static void parse(String sqlString, Recognizer recognizer) throws QueryException{
    2     boolean hasMainOutputParameter = sqlString.indexOf( "call" ) > 0 &&
    3                                    sqlString.indexOf( "?" ) < sqlString.indexOf( "call" ) &&
    4                                    sqlString.indexOf( "=" ) < sqlString.indexOf( "call" );
    5     ......
    6 }

    我们都知道hibernate3可以调用存储过程或函数,但是有一定的限制(具体可以查看hibernate官方手册)。
    据我分析这段代码应该是用来分析字符串是否是调用存储过程或函数的语句。
    解决方法:
    1.不要在表或列中,出现"call"字样
    2.用Criteria来代替hql语句

  • 相关阅读:
    UVA 11991 Easy Problem from Rujia Liu(map,vector的使用)
    UVA 11995 I Can Guess the Data Structure! (STL应用)
    HDU 2795 Billboard(线段树,单点更新)
    HDU 1394 Minimum Inversion Number (线段树,单点更新)
    UVA 11827 Maximum GCD(读入技巧,stringstream的使用)
    contest 2 总结
    Const 1 总结
    开始进行大量题目练习
    函数式线段树的个人理解
    poj 2318 TOYS
  • 原文地址:https://www.cnblogs.com/timelyxyz/p/2538095.html
Copyright © 2011-2022 走看看