i have used the appfuse wrapper method "findByNamedQuery" because it use
findByNamedQueryAndNamedParam and it works perfectly:

   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);
       }
       return getHibernateTemplate().findByNamedQueryAndNamedParam(
           queryName,
           params,
           values);
   }

but i didn´t know if the excepción using *"getHibernateTemplate.*
findByNamedQuery*"* was a bug  or i am using bad the api.

thanks kan


On Wed, Aug 27, 2008 at 11:35 AM, Kan Sun <[EMAIL PROTECTED]> wrote:

> Hi Miguel
>
> I just encountered exactly the same problem yesterday. I notice that in
> your code there is a line
>
> *return getHibernateTemplate().findByNamedQuery("myquery",queryParams);*
>
> I think you should alternatively use a counterpart of the findByNamedQuery
> e.g.
>
> *getHibernateTemplate().findByNamedQueryAndNamedParam("myquery",
> queryParamNames, queryParamValues);*
>
> Here queryParamNames and queryParamValues are two arrays containing keys
> and values of your input parameter map. In fact why not just use the wrapper
> method provided by AppFuse that takes the Map of input parameters directly?
>
> Kan
>
> 2008/8/27 Miguel Romero <[EMAIL PROTECTED]>
>
> 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