java.lang.IndexOutOfBoundsException
发布时间: 2013-11-09 17:06:47 作者: rapoo
java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-base
在使用Spring的HibernateTemplate查找数据时,出现题目中的错误信息,从字面可以看出是HQL语句的参数设置出了问题.
原因:JPA的问号索引是从1开始的,而HibernateTemplate是从0开始的。而且HibernateTemplate执行HQL语句时,HQL的语句中'?'号面是不带数字的,而使用JPA时,HQL语句的'?'是可以有数字的(是否必须有待考证),带数字的话一定是从1开始。
???? 对于使用HibernateTemplate而言:
???? (1)正确:'from User where username = ? and password = ?'
/** * 为Where语句传递参数 * @param query * @param queryParams * o.key = ?1 and o.name=?2 这是错误的,JPA的问号索引是从1开始的,而HibernateTemplate是从0开始的,HibernateTemplate执行HQL语句时,HQL的语句中'?'号面是不带数字的 * o.key = ? and o.name=? */protected void setQueryParams(Query query,Object[] queryParams) {if(queryParams!=null && queryParams.length>0){for(int i=0;i<queryParams.length;i++){//JPA的问号索引是从1开始的,而HibernateTemplate是从0开始的query.setParameter(i, queryParams[i]);//如果是JPA:i+1}}}
?