异常信息如下:org.hibernate.QueryParameterException: could not locate named parameter [username]
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:107)
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:461)
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:431)
at com.springmvc.dao.UserDaoImpl.findUser(UserDaoImpl.java:24)
at com.springmvc.service.UserServiceImpl.findUser(UserServiceImpl.java:26)
at com.springmvc.service.UserServiceImpl$$FastClassByCGLIB$$de8aee3.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.springmvc.service.UserServiceImpl$$EnhancerByCGLIB$$6c958727.findUser(<generated>)
at com.springmvc.controller.UserController.findUser(UserController.java:37)
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.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
at java.lang.Thread.run(Thread.java:595)
但是我dao中的代码参数类型和参数个数是匹配的。dao中的代码如下:@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sessionFactory;

public User findUser(String userName) {
Session session = getSession();
String sql = " from " + User.class.getName() +" where username = :username ";
Query query = session.createQuery(sql);
query.setParameter("username", userName);
//方式2
// String sql2 = " from " + User.class.getName() +" where username = ?";
// Query query2 = session.createQuery(sql);
// query2.setParameter(0, userName);
//方式3
// String sql3 = " from " + User.class.getName() +" where username = " + userName;
// Query query3 = session.createQuery(sql);
List list = query.list();
if (list.isEmpty()) {
return new User();
}
User user  = (User)list.get(0);
return user;
}
public Session getSession() {
return sessionFactory.getCurrentSession();
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}}其中方式3查询不到数据。我用一个数据库表中存在的用户名也查询不到数据。请帮忙看下。多谢!代码如下:
web.xml中的配置
<servlet>
   <servlet-name>spring</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring-servlet.xml</param-value>
   </init-param>
  </servlet>
  <servlet-mapping>
   <servlet-name>spring</servlet-name>
   <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  
  <listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
spring-servlet.xml 中的配置<context:component-scan base-package="com.springmvc.controller"></context:component-scan>

<bean id="urlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>

<!--  配置试图解析器 -->
<bean id="jstlViewResolver" class=" org.springframework.web.servlet.view.InternalResourceViewResolver" 
p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/jsp/" 
p:suffix=".jsp" />spring-dao.xml中的配置<context:component-scan base-package="com.springmvc.dao"></context:component-scan>

<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/springmvc"></property>  
         <property name="username" value="root"/>  
         <property name="password" value=""/> 
</bean>

<!-- 配置hibernate相关信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
                 <prop key="hibernate.show_sql">true</prop>  
                 <prop key="hibernate.hbm2ddl.auto">update</prop> 
</props>

</property>
     
<!-- 以下列表写入实体类 -->  
         <property name="annotatedClasses">  
             <list>
             <value>com.springmvc.dao.UserDaoImpl</value>
             </list>  
         </property>  
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
         <property name="sessionFactory" ref="sessionFactory"/>  
     </bean> 
    
    <!-- 使用annotation定义事务 -->  
     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
spring-service.xml中的配置:
<context:component-scan base-package="com.springmvc.service"></context:component-scan>