ordinal parameter mismatch
来源:互联网 发布:javs编程思想pdf百度云 编辑:程序博客网 时间:2024/05/22 14:38
hibernate 的bug org.hibernate.HibernateException: ordinal parameter mismatch
(2012-04-13 14:23:42)标签:
hibernate
hql
criteria
ordinal
parameter
mismatch
it
分类: IT异常分析只要在hql中出现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类中有下列一段代码
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" );
......
}
我们都知道hibernate3可以调用存储过程或函数,但是有一定的限制(具体可以查看hibernate官方手册)。
据我分析这段代码应该是用来分析字符串是否是调用存储过程或函数的语句。
解决方法:
1.不要在表或列中,出现"call"字样
2.用Criteria来代替hql语句
以下是关于Criteria用法的例子:
public List getCalldetailByDate(String hts,String hte,int accountid){
String sda = hts + " " + "00:00:00";
String eda = hte + " " + "23:59:59";
Calendar start_calendar = ParseDate.parseDateTime(sda); //parseDate是一个将字符串格式的转化为Calendar的一个方法
Date start_date = start_calendar.getTime();
//System.out.println(start_date);
Calendar end_calendar = ParseDate.parseDateTime(eda);
Date end_date = end_calendar.getTime();
//System.out.println(end_date);
Criteria criteria = this.getSession().createCriteria(Calldetail.class);
criteria.add(Expression.eq("accounts.u_accountid",accountid));
criteria.add(Expression.eq("u_callresult","1"));
criteria.add(Expression.eq("u_callstate","1"));
criteria.add(Expression.between("u_ostarttime", start_date, end_date));
Criteria.addOrder(Order.desc("id"))
List list = criteria.list();
return list;
}
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类中有下列一段代码
public static void parse(String sqlString, Recognizer recognizer) throws QueryException{
}
我们都知道hibernate3可以调用存储过程或函数,但是有一定的限制(具体可以查看hibernate官方手册)。
据我分析这段代码应该是用来分析字符串是否是调用存储过程或函数的语句。
解决方法:
1.不要在表或列中,出现"call"字样
2.用Criteria来代替hql语句
以下是关于Criteria用法的例子:
public List getCalldetailByDate(String hts,String hte,int accountid){
}
- Ordinal parameter mismatch
- ordinal parameter mismatch
- ordinal parameter mismatch
- ordinal parameter mismatch
- Hibernate中ordinal parameter mismatch的BUG
- Hibernate中ordinal parameter mismatch的BUG
- ORA-19808: recovery destination parameter mismatch
- 解决:QSqlQuery出现parameter count mismatch
- oracle 11g RAC ORA-19808: recovery destination parameter mismatch
- mismatch
- mismatch
- 反射方法调用时的一个错误:参数计数不匹配( parameter count mismatch )
- 反射方法调用时的一个错误:参数计数不匹配( parameter count mismatch )
- 反射方法调用时的一个错误:参数计数不匹配( parameter count mismatch )
- warning C6302: Format string mismatch: character string passed as parameter '4' when wide character
- 反射方法调用时的一个错误:参数计数不匹配( parameter count mismatch )
- Parameter
- Ordinal Numbers
- 深搜:Nightmare
- ios自定义checkbox
- Set3
- lazyLoad 懒加载 图片例子
- ubuntu nautilus ./ 以窗口模式打开当前目录
- ordinal parameter mismatch
- 爱你却不能牵你的手
- 线段树模板 (poj 3468)延迟标记
- Connected Components Workbench 1.02 在Win2003下安装
- 中位数优先容器
- 深搜:Red and Black
- [心得]C语言中整型与字符串之间的转换
- android UI 优化系之 使用theme 预加载
- Ios使用按钮自定义segmentcontrol