日期:2014-05-20  浏览次数:20676 次

hibernate hql查询语句问题;
我想检查用户是否存在:
hql语句让如下:
Java code


String hql="from UserBean where name=? and password=?";
int b=session.createQuery(hql).setParameter(0,user.getName())
                    .setParameter(1,user.getPassword())
                    .executeUpdate();




Java code

org.hibernate.hql.ast.QueryTranslatorImpl.errorIfSelect(QueryTranslatorImpl.java:301)
    org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:418)
    org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
    org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1168)
    org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)
    com.chengge.dao.impl.UserDaoImpl.checkUser(UserDaoImpl.java:36)
    com.chengge.service.impl.UserServiceImpl.checkUser(UserServiceImpl.java:24)
    com.chengge.action.UserAction.login(UserAction.java:25)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)





不过报错了。还有我想知道如果用户存在,b的值会是多少?是1吗?
hql语句中有没只返回一行数据的语句的(list()方法和iterator()方法是返回集合的)?

------解决方案--------------------
你这个是个查询的sql
怎么能用executeUpdate()呢

要用.list();
List list =session.createQuery(hql).setParameter(0,user.getName())
.setParameter(1,user.getPassword())
.list();

判断list的长度是不是>0
------解决方案--------------------
你使用executeUpdate();这个方法不行。



------解决方案--------------------
个人感觉
第一:先解决问题
第二:问题解决了,停下来针对这一个问题是看HIBERNATE源代码,看API
------解决方案--------------------
hibernate这么用还不如不用
------解决方案--------------------
看看这样行不行:

String hql="from UserBean where name=? and password=?";

Query query = session.createQuery(hql);

query.setString (0,user.getName());

query.setString(1,user.getPassword()) ;

int b = query.executeUpdate() ;
------解决方案--------------------
+1
探讨
你这个是个查询的sql
怎么能用executeUpdate()呢

要用.list();
List list =session.createQuery(hql).setParameter(0,user.getName())
.setParameter(1,user.getPassword())
.list();

判断list的长度是不是>0

------解决方案--------------------
探讨
+1

引用:
你这个是个查询的sql
怎么能用executeUpdate()呢

要用.list();
List list =session.createQuery(hql).setParameter(0,user.getName())
.setParameter(1,user.getPassword())
.list();

判断list的长度……

------解决方案--------------------
当我们查询的时候,需要返回List集合,这是用list(),但我们想更新的时候就有executeUpdate();
------解决方案--------------------
探讨

你这个是个查询的sql
怎么能用executeUpdate()呢

要用.list();
List list =session.createQuery(hql).setParameter(0,user.getName())
.setParameter(1,user.getPassword())
.list……