hi appfusers,

in appfuse 2.x, i have a problem executing, the follow sentence java:
[code]
return getHibernateTemplate().findByNamedQuery("myquery",queryParams);
[/code]
throws the next exception:
java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are
1-based!

if i change the code to:
[code]
return findByNamedQuery("myquery",queryParams);
[/code]
GenericDaoHibernate public method:
   public List<T> findByNamedQuery(
       String queryName,
       Map<String, Object> queryParams) {
       String []params = new String[queryParams.size()];
       Object []values = new Object[queryParams.size()];
       int index = 0;
       Iterator<String> i = queryParams.keySet().iterator();
       while (i.hasNext()) {
           String key = i.next();
           params[index] = key;
           values[index++] = queryParams.get(key);
       }
the excepcion isn´t threw. All works well!


Is this one a bug in  getHibernateTemplate ? i think that the problem is the
next definition

[code]values[index++] = queryParams.get(key);[/(code]

because in getHibernateTemplate the array definition doesn´t started in 1...
started in 0

[code of HiberanteTemplate]
    public List findByNamedQuery(final String queryName, final Object[]
values) throws DataAccessException {
        return (List) executeWithNativeSession(new HibernateCallback() {
            public Object doInHibernate(Session session) throws
HibernateException {
                Query queryObject = session.getNamedQuery(queryName);
                prepareQuery(queryObject);
                if (values != null) {
                    for (int i = 0; i < values.length; i++) {
                        queryObject.setParameter(i, values[i]);
                    }
                }
                return queryObject.list();
            }
        });
    }
[/code of HiberanteTemplate]


thanks

Reply via email to