сообщение: Помните, что порядковые параметры основаны на 1! (и я) - PullRequest
2 голосов
/ 20 сентября 2011

Я пытаюсь сделать более общий метод для входа в систему.

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;
}

Мой код работал нормально, но теперь я хотел сделать что-то вроде:

 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;

но теперь я получаю:

java.lang.IndexOutOfBoundsException: Помните, что порядковые параметры основаны на 1!

, хотя вы можете видеть, что я использую 1подход.Что не так с тем, что я делаю?Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

На самом деле, в Hibernate параметры основаны на 0. См. документы .

position - the position of the parameter in the query string, numbered from 0.
0 голосов
/ 17 июля 2014

Эта ошибка также возникала при вызове HibernateTemplate с несовпадающим числом параметров.

String query = "select * from table where x=? and y=? and z=? order by timestamp desc";
HibernateTemplate ht = getHibernateTemplate();
ht.find(query, parm1, parm2, parm3, parm4); 

// i was calling find() with 4 parmeters while the query only expects 3 parameters -> IndexOutOfBoundsException
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...