illegalArgumentException:查询中没有位置参数

时间:2013-12-16 11:48:04

标签: hibernate

DaoLayer代码是:

String query="from hibernate.EmpRecord u where u.uname=? and u.upass=?";

          Query hql =session.createQuery(query);
          hql.setString(0, uname);
          hql.setString(1, upass);
                List<EmpRecord> userObjs= hql.list();
            if(userObjs.size() != 0) {
                    System.out.println(" User name : " + userObjs.get(0).getuname() + ", Status : " + userObjs.get(0).getIs_admin());
                    userStatus = true;

            }
            transaction.commit();
            System.out.println(userStatus);
    } catch(Exception e) {
            e.printStackTrace();
            transaction.rollback();
    }
    return userStatus;


}

Stack Trace是:

inside Process Method
Inside into service class
Inside into dao class
java.lang.IllegalArgumentException: No positional parameters in query: from hibernate.EmpRecord u where u.uname=? and u.upass=?
    at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:356)
    at org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:481)
    at hibernate.EmpDao.verifyUserDaoAndPassDao(EmpDao.java:32)
    at service.Empservice.verifyUserNameAndPassword(Empservice.java:20)
    at web.LogController.processCredentials(LogController.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    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:191)
    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:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的查询及其参数在语法上是正确的。在我的例子中,Hibernate抛出了这个错误,因为我忘了将映射添加到hibernate.cfg.xml(或者你正在使用的任何类型的映射配置),如下所示:

<hibernate-configuration>
    <session-factory>
        ...
        <mapping resource="com/hibernate/myproject/MyClassMapping.hbm.xml" />
        ...
    </session-factory>
</hibernate-configuration>

添加映射后,一切正常。

在这种情况下,这是Hibernate抛出的一个非常误导的错误。

答案 1 :(得分:0)

检查占位符和参数的数量帮助。

我在修改查询时遇到了这个问题。之前我的查询有2个参数,更改后只有1个参数,我忘了从参数列表中删除参数。

答案 2 :(得分:0)

我也遇到了同样的错误,问题出在我这边。

有一个参数等待“set par = ?”,通常第一个参数的位置为“0”。

如果您使用 1 而不是“0”作为参数的位置,您将收到此错误。

请注意等待设置的参数个数。

除此之外,我还检查了您的代码。这里的问题是映射。您是说设置参数字符串,但除此之外,您使用的是 Hibernate Query,而不是 Hibernate SQL Query。在这种情况下,您应该使用映射。因为异常来自 ANNOTATION.