我正在尝试为登录创建更通用的方法。
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的方法。我正在做什么出了什么问题?
谢谢你的帮助!
答案 0 :(得分:3)
实际上,在Hibernate中参数是基于0的。请参阅docs。
position - the position of the parameter in the query string, numbered from 0.
答案 1 :(得分:0)
当我使用不匹配的参数计数调用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