疯狂学习hibernate...
今天做了个小小的电子商城,在用户登录模块居然卡壳了
其实也就是验证个用户名和密码,于是写了如下HQL:
Query q = session.createQuery("from User u where u.userName=? and " +
"u.passWord=?");
q.setString(1, user.getUserName());
q.setString(2, user.getPassWord());
机子运行速度太猛,很快报错
Exception in thread "main" java.lang.IllegalArgumentException: Positional parameter does not exist: 2 in query: from User u where u.userName=? and u.passWord=?
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:383)
at org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:505)
at org.zjl.estore.daoImpl.UserDaoImpl.login(UserDaoImpl.java:25)
at org.zjl.estore.daoImpl.UserDaoImpl.main(UserDaoImpl.java:96)
带上眼镜又看自仔细看了几遍,查询语句应该没错啊,接下来又胡乱的改了几个像样的
还是不行,没办法,之后换成:
Query q = session.createQuery("from User u where u.userName=:userName and " +
"u.passWord=:passWord");
q.setString("userName", user.getUserName());
q.setString("passWord", user.getPassWord());
这下可终于没问题了。
可是为什么用?就不干了呢?为了干掉它,上网查了下----
过程很复杂,结果很简单,原来HQL的?是从 0 开始的,换成下面:
Query q = session.createQuery("from User u where u.userName=? and " +
"u.passWord=?");
q.setString(0, user.getUserName());
q.setString(1, user.getPassWord());
就没问题了。
呵呵``之前一直用的JDBC,它的?是从1开始的,不知道为什么HQL非要从0开始。
看来菜鸟的路还很长啊--
疯狂学习hibernate...