首页 > 解决方案 > 嵌套异常是 org.hibernate.QueryParameterException:找不到命名参数 [限制]

问题描述

public java.util.Collection findEstablishmentProfessionalsByUsernameEstId(
            java.lang.String espUseUsername, java.lang.Integer espEstId, Integer limit) throws GenericBusinessException {
        try {
            
            ArrayList paramList = new ArrayList();
            List valueList = new ArrayList();
                
            paramList.add(new String("espEstId"));
            valueList.add(espEstId);
            
            paramList.add(new String("espUseUsername"));
            valueList.add(espUseUsername);
            
            String queryString = "from "
                    + EstablishmentProfessionalsBean.class.getName()
                    + " e where e.espEstId = :espEstId and e.espRecordStatus='approved' and e.espUseUsername=:espUseUsername and e.espShow=1";
            // Add a an order by on all primary keys to assure reproducable
            // results.
            
            queryString += " order by e.espSurname ASC,e.espInitials ASC,e.espExtClinicName ASC";
            if(limit != null && limit.intValue() > 0){
                paramList.add(new String("limit"));
                valueList.add(limit);
            }       
            String params [] = (String []) paramList.toArray (new String [paramList.size ()]);
            List list = hibernateTemplate.findByNamedParam(queryString,params, valueList.toArray());
            return list;
        } catch (DataAccessException e) {
            log.error("DataAccessException", e);
            throw new GenericBusinessException(e);
        } finally {
            log.debug("finished findEstablishmentProfessionalsByUsernameEstId((java.lang.String espUseUsername, java.lang.Integer espEstId, Integer limit)");
        }
    }

following are the stack trace

堆栈跟踪

com.riomed.cellma.exception.GenericBusinessException:org.springframework.orm.hibernate3.HibernateQueryException:找不到命名参数[限制];嵌套异常是 org.hibernate.QueryParameterException: could not locate named parameter [limit] at com.riomed.cellma.session.CellmaFacade.findEstablishmentProfessionalsByUsernameEstId(CellmaFacade.java:30866) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base /java.lang.reflect.Method.invoke(Method.java:566) 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 在 org.springframework.aop.framework。runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread. java:61) at java.base/java.lang.Thread.run(Thread.java:834) 引起:org.springframework.orm.hibernate3.HibernateQueryException:找不到命名参数[限制];嵌套异常是 org.hibernate.QueryParameterException: could not locate named parameter [limit] at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:642) at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor .java:412) 在 org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424) 在 org.springframework.orm.hibernate3。

标签: javahibernatehql

解决方案


在您的查询中:

e where e.espEstId = :espEstId and e.espRecordStatus='approved'
and e.espUseUsername=:espUseUsername and e.espShow=1

你有这些命名参数:

  • :espEstId
  • :espUseUsername

你想替换一个命名参数limit

因为在您的代码中,您这样编写:

paramList.add(new String("limit"));
valueList.add(limit);

但是你的查询中没有 :limit ,所以你有这个错误。


推荐阅读