message: 请记住序数参数是从 1 开始的!(我也是)

Thi*_*ago 4 hibernate

我正在尝试制定一种更通用的登录方法。

public boolean login(String login, String pass) 
             throws ClassNotFoundException, SQLException {   
        open();   
        q = s.createQuery("select u from Usuario u 
                               where u.login =:id1 and u.pass = :id2");   
        q.setString("id1", login);  
        q.setString("id2", pass);  
        if(q.uniqueResult()!=null)  
        return true;  
        else  
            return false;
}
Run Code Online (Sandbox Code Playgroud)

我的代码运行得很好,但现在我想做一些类似的事情:

 public boolean login(String login, String pass) 
          throws ClassNotFoundException, SQLException {  

        return paramFunction("select u from Usuario u 
             where u.login = ?1 and u.pass=?2", login, pass);
 }
 public boolean paramFunction(String query, Object... params){
    try {
        open();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    q = s.createQuery(query);
            for (int i = 1; i <= params.length; i++) {
                q.setParameter(i, params[i-1]);}
    if (q.uniqueResult() != null)
        return true;
    else
        return false;
Run Code Online (Sandbox Code Playgroud)

但现在我得到:

java.lang.IndexOutOfBoundsException:记住序数参数是从 1 开始的!

尽管您可以看到我使用的是基于 1 的方法。我正在做的事情有什么问题吗?

谢谢您的帮助!

Ale*_*man 5

实际上,在 Hibernate 中参数是从 0 开始的。请参阅文档

position - the position of the parameter in the query string, numbered from 0.
Run Code Online (Sandbox Code Playgroud)