【问题标题】:Error org.hibernate.QueryParameterException: could not locate named parameter [i]错误 org.hibernate.QueryParameterException:找不到命名参数 [i]
【发布时间】:2015-04-29 18:28:55
【问题描述】:

我尝试运行下面的代码但有错误。

<body>
<%
    String uname = request.getParameter("name");
    String pwd = request.getParameter("password");

    Session s = new AnnotationConfiguration().configure() .buildSessionFactory().openSession();
    Transaction t = s.beginTransaction();
    Query q = s.createQuery("from pack1.Login as l where l.name = :n and l.password = :pwd");
    q.setParameter("n", uname);
    q.setParameter("pwd", pwd);
    List<Login> records = q.list();

    if (records.size() > 0) {
        request.setAttribute("loginstatus", "Login Successful.");
        HttpSession session1 = request.getSession();
        session1.setAttribute("username", uname);
        getServletContext().getRequestDispatcher("/profile.jsp").forward(request, response);
    } else {
        request.setAttribute("loginstatus", "Username/Password do not match.");
        getServletContext().getRequestDispatcher("/SignIn.html").forward(request, response);
    }

    out.close();        
%>
</body>

文件Login.java

    public class Login extends ActionSupport implements SessionAware  {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    SessionMap<String, String> hm;            

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    private String name;
    private String email;
    private Long mobile;
    private String password;


    public Long getMobile() {
        return mobile;
    }

    public void setMobile(Long mobile) {
        this.mobile = mobile;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String execute(){
       return "success";
    }

    @Override
    public void setSession(Map<String, Object> map) {
        hm = (SessionMap) map;        
    }

    public String logout(){
        hm.invalidate();
        return "success";
    }
}

堆栈跟踪:

    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:428)
root cause

org.hibernate.QueryParameterException: could not locate named parameter [n]
    org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148)
    org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165)
    org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523)
    org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493)
    org.apache.jsp.Login_jsp._jspService(Login_jsp.java:118)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:428)

【问题讨论】:

  • Action 是后缀。你应该把这个类命名为LoginAction

标签: hibernate struts


【解决方案1】:

对于类中的每个数据列,您不需要@Column 吗?除非您有外部映射文件,否则不会将任何属性映射到相应的数据列,并且类本身也不会用@Entity 标记。所以尽管最初的问题是,看起来你没有为休眠定义的基本 POJO。

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 2016-10-21
    • 2013-09-11
    • 1970-01-01
    • 2012-10-02
    • 2015-03-29
    • 2020-06-04
    • 2012-11-03
    • 2017-11-21
    相关资源
    最近更新 更多