那位给我看看以下是错误啥意思哦?
    严重: Servlet.service() for servlet action threw exception
org.hibernate.TypeMismatchException: named parameter [ids] not of expected type; expected = class java.lang.Integer; but was =java.util.HashMap$KeySet
at org.hibernate.loader.hql.QueryLoader.bindNamedParameters(QueryLoader.java:520)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1576)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2144)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
at org.hibernate.loader.Loader.list(Loader.java:2023)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.passion.oa.manager.impl.AclManagerImpl.searchModules(AclManagerImpl.java:165)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy6.searchModules(Unknown Source)
at org.passion.oa.web.action.IndexAction.outlook(IndexAction.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.passion.oa.web.PagerFilter.doFilter(PagerFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    名称为ids参数类型绑定错误
    应该是Integer,却使用HashMap.keySet类型的
      

  2.   

    named parameter [ids] not of expected type; expected = class java.lang.Integer; but was =java.util.HashMap$KeySet这个貌似很容易看懂吧。ids没匹配到预期的类型。预期的是class java.lang.Integer;却是java.util.HashMap$KeySet
      

  3.   

    org.hibernate.TypeMismatchException: named parameter [ids] not of expected type; expected = class java.lang.Integer; but was =java.util.HashMap$KeySet很容易看懂啊,说你的参数不正确,应该是java.lang.Integer的,你的确实java.util.HashMap$KeySet
      

  4.   

    麻烦各位给我看看,根据上面我提的问题如何修改以下代码:
    public List searchModules(int userId) {

    //按优先级从低到高查找用户拥有的权限
    String hql = "select r.id from UsersRoles ur join ur.role r join     ur.user u " +
    "where u.id = ? order by ur.orderNo desc";
    List aclIds = getHibernateTemplate().find(hql, userId); //定义临时变量
    Map temp = new HashMap();

    //依次循环角色
    for(Iterator iter = aclIds.iterator(); iter.hasNext();) {
    Integer rid = (Integer)iter.next();

    //根据角色获得角色拥有的权列表
    List acls = findRoleACLs(rid);

    //把授权放入临时变量中
    for (Iterator iterator = acls.iterator(); iterator.hasNext();) {
    ACL acl = (ACL)iterator.next();
    temp.put(acl.getResourceSn(), acl);
    }
    } //查找直接授予用户的授权列表
    List acls = findUserACLs(userId);
    for(Iterator iter = acls.iterator(); iter.hasNext();) {
    ACL acl = (ACL)iter.next();
    temp.put(acl.getResourceSn(), acl);
    }

    //现在已获得用户拥有的所有授权(包括直接授予用户自身以及其包含的角色的授权)
    List delResources = new ArrayList();
    Set entries = temp.entrySet();
    for (Iterator iter = entries.iterator(); iter.hasNext();) {
    Map.Entry entry = (Map.Entry) iter.next();
    ACL acl = (ACL)entry.getValue();

    //如果没有读取权限,则需要在临时变量中删除这个授权
    if(acl.getPermission(Permission.READ) == ACL.ACL_NO) {
    delResources.add(entry.getKey());
    }
    }

    //在临时变量中删除这个授权
    for (Iterator iter = delResources.iterator(); iter.hasNext();) {
    Object key = (Object) iter.next();
    temp.remove(key);
    }

    //如果授权列表是空的话,则返回0长度的集合
    if(temp.isEmpty()) {
    return new ArrayList();
    }

    //现在已获得用户拥有读取权限的授权
    String searchModules = "select m from Module m where m.id in (:ids)