【问题标题】:org.hibernate.QueryParameterException: could not locate named parameter [userId]org.hibernate.QueryParameterException:找不到命名参数 [userId]
【发布时间】:2013-09-11 21:55:54
【问题描述】:

我需要帮助,我遇到了上述异常。我哪里错了?在从类到表的映射中,我使用了以下内容:

private String userId;
private String password;

下面是我编写查询的类。

public class LoginManager extends HibernateUtil {
    private String loginId;

    public String checkCredentials(String userId, String password) {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        try {
          loginId = (String) session.createQuery("select user_id from com.project.model.Login where user_id=:userId and password=:password") 
                                   .setParameter("userId",userId)
                                   .setParameter("password", password)
                                   .list().toString();
        } catch (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
        session.getTransaction().commit();
        return loginId;
    }
}

实体

@Entity
@Table(name = "Login")
public class Login implements Serializable {
    private static final long serialVersionUID = 2L;
    private String userId;
    private String password;

    @Id
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }

    public void setUser_id(String userId) {
        this.userId = userId;
    }

    @Column(name = "password")
    public String getPassword() {
        return password;
    }

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

【问题讨论】:

    标签: hibernate exception query-parameters


    【解决方案1】:

    Hibernate 通过你的变量名映射你的数据库。所以你有;

    userId;
    

    但在您的查询中,您有

    user_id
    

    您需要使用userId 而不是user_id

    异常清楚地表明您提供了错误的参数。

    【讨论】:

      【解决方案2】:

      检查是否是拼写错误

      loginId = (String) session.createQuery("select user_id from com.project.model.Login where user_id=:userId and password=:password") .**setParameter("userId",userId)**.setParameter("password", password).list().toString();
      
      
      loginId = (String) session.createQuery("select user_id from com.project.model.Login where user_id=:userId and password=:password") .**setParameter("user_id",userId)**.setParameter("password", password).list().toString();
      

      【讨论】:

      • 不,不是这样。我试过了,给出了类似的结果。 “org.hibernate.QueryParameterException:找不到命名参数 [user_id]”
      • 你能把带有映射的 com.project.model.Login 文件发给我吗?
      • 就是这样。@Entity @Table(name = "Login") public class Login 实现 Serializable { private static final long serialVersionUID = 2L;私人字符串用户ID;私人字符串密码; @Id @Column(name="user_id") public String getUserId() { return userId; } public void setUser_id(String userId) { this.userId = userId; } @Column(name="password") public String getPassword() { 返回密码; } public void setPassword(String password) { this.password = password; }}
      【解决方案3】:

      问题是 Hibernate 找不到字段 userId 的设置器。你已经这样定义它了:

      public void setUser_id(String userId) { 
          this.userId = userId;
      } 
      

      应该是:

      public void setUserId(String userId) { 
          this.userId = userId;
      } 
      

      【讨论】:

      • 我早先修复了这个问题。还是非常感谢!
      • @namita 可能值得发布解决您的问题的修复程序,以便其他人可以找到它。
      猜你喜欢
      • 2012-09-08
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2020-06-04
      • 2012-11-03
      • 2017-11-21
      • 2017-12-30
      相关资源
      最近更新 更多