使用Spring提供的模板类HibernateDaoSupport,如果单纯的使用'命名参数'的形式编写HQL语句如:
public class UserDaoImpl extends HibernateDaoSupport implements IUser { @Override
public User login(String userName, String pwd) {
String hql="from User as u where u.username=:userName and u.password=:pwd";
/*String hql="from User as u where u.username=? and u.password=?";*/
List<User> list=getHibernateTemplate().find(hql,userName,pwd);
if(list==null||list.size()<1){
return null;
}else {
return list.get(0);
} }
}
则会报java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!异常
问题发生的原因是:1.hql语句里不需要参数,却添加了一个参数,删掉添加参数的语句就可以了,
2.参数用“?”时 ,周围不能加单引号,否则被当作字符串处理了
问题的解决方案:是把上面的使用【命名参数】的HQL语句直接改成以【问号的方式传参】,就可以解决这个问题了