【问题标题】:nested exception is org.hibernate.QueryParameterException: could not locate named parameter [limit] [closed]嵌套异常是 org.hibernate.QueryParameterException:找不到命名参数 [限制] [关闭]
【发布时间】:2020-11-19 05:21:50
【问题描述】:
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:不能 定位命名参数 [limit];嵌套异常是 org.hibernate.QueryParameterException:找不到命名的 参数 [限制] 在 com.riomed.cellma.session.CellmaFacade.findEstablishmentProfessionalsByUsernameEstId(CellmaFacade.java:30866) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 在 com.sun.proxy.$Proxy321.findEstablishmentProfessionalsByUsernameEstId(未知 来源)在 com.riomed.cellma.cellma.util.GeneralWebLayerUtils.addAjaxExtraDetailsEntryForQucId(GeneralWebLayerUtils.java:4252) 在 com.riomed.cellma.cellma.util.AssessmentsSaveQuestionsUtils.saveReferralRecordForQuestionAnswered(AssessmentsSaveQuestionsUtils.java:178) 在 com.riomed.cellma.actions.SaveQuestionsResultAction.execute(SaveQuestionsResultAction.java:239) 在 org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421) 在 org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226) 在 org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 在 org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:660) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:167) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:128) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.SensitiveDataCheckFilter.doFilter(SensitiveDataCheckFilter.java:1944) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.CSRFFilter.doFilter(CSRFFilter.java:1726) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.XSSFilter.doFilter(XSSFilter.java:2301) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.PatientSelectionCheckFilter.doFilter(PatientSelectionCheckFilter.java:416) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.AuthorisationFilter.doFilter(AuthorisationFilter.java:1598) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:287) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 com.riomed.cellma.filter.MessageDisplayFilter.doFilter(MessageDisplayFilter.java:138) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.tukey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 在 org.tukey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 在 org.tukey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 在 org.tukey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:239) 在 net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:215) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 在 org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:396) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.base/java.lang.Thread.run(Thread.java:834) 引起: org.springframework.orm.hibernate3.HibernateQueryException:不能 定位命名参数 [limit];嵌套异常是 org.hibernate.QueryParameterException:找不到命名的 参数 [限制] 在 org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:642) 在 org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) 在 org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424) 在 org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 在 org.springframework.orm.hibernate3.HibernateTemplate.findByNamedParam(HibernateTemplate.java:943) 在 com.riomed.cellma.session.CellmaFacade.findEstablishmentProfessionalsByUsernameEstId(CellmaFacade.java:30862) ... 83 更多原因:org.hibernate.QueryParameterException:可以 未将命名参数 [limit] 定位在 org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:75) 在 org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:81) 在 org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:413) 在 org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:383) 在 org.springframework.orm.hibernate3.HibernateTemplate.applyNamedParameterToQuery(HibernateTemplate.java:1253) 在 org.springframework.orm.hibernate3.HibernateTemplate$31.doInHibernate(HibernateTemplate.java:949) 在 org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419) ... 86 更多

【问题讨论】:

  • 在此处发布错误堆栈跟踪
  • 请检查我是否添加了堆栈跟踪

标签: java hibernate hql


【解决方案1】:

在您的查询中:

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,所以你有这个错误。

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2016-10-21
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2012-01-18
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多