最近在看别人写的代码,看到下面这段有点疑惑final String queryString = "select count(r.adminId) from Admin r where r.adminLoginName =:name and r.adminId !=:id ";
return (Boolean) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(queryString)
.setString("adminLoginName", username).setString("adminId", (null==userid?"":userid));
return Integer.valueOf(query.uniqueResult().toString()) > 0;
}
});那段queryString不是sql语句吗,sql语句使用Query类去查询不会有问题吗?望指教

解决方案 »

  1.   

    Admin是vo名字而不是表名,这是关键。
      

  2.   

    不是有自带的 createSQLQuery方法么
      

  3.   

    那会不会出现表名也是Admin的?数据库的表难道默认都是小写的吗?
      

  4.   

    select count(r.adminId) from Admin r where r.adminLoginName =:name and r.adminId !=:id 这哪里是sql了,这是JPQL吧。注意:name和:id好像是JPQL中的命名变量吧。但是在给命名变量赋值是又奇怪了.setString("adminLoginName", username).setString("adminId", (null==userid?"":userid));这里两个命名变量好像是adminLoginName和adminId.
      

  5.   

    看用了createQuery(),queryString 是hql
      

  6.   

    你给的例子中,queryString 就是Hql;
    也可写成:
    "select count(r.adminId) from 包命.Admin r where r.adminLoginName =:name and r.adminId !=:id ";
      

  7.   

      现在问题是会不会有可能有张表也叫Admin呢,那不是有问题了?还是说数据库的表默认就是小写的呢?
      

  8.   

    HQL from后面跟的是类名
      

  9.   

    有可能叫Admin,也可能不是,具体要看配置文件才知道,大小无关要紧,hql最后还是变成sql入库执行
      

  10.   


    如果持久类也叫Admin,表名也叫Admin,是不是在写HQL语句的时候,Admin前面就要加上包名来判断是持久类还是表名了?
      

  11.   

    不是,hql必须是类名,和表名无关,无须加包名。
      

  12.   

    HQL from后面跟的是类名
    +1
    不要跟表名
      

  13.   


    自己去看书吧。你这样问是浪费大家的时间。
    看代码之前你至少要明确hql语句是什么,他是怎样执行的。最终它要转换成什么来和数据库交互。
    你这样问,让大家怎样帮你。hql是不查表名的,你还一直问怎样区分表名和类名。
    给你打个比方:数据加里有一张表叫Admin 后后通过配置文件或注解把  com.test.Admin和数据库表Admin映射起来。用HQL语句查询from Admin查询的是对象,是com.test.Admin这个对象,然后hibernate再根据配置文件来生成sql语句来操作Admin这张表。
    我这样说你明白了吧,如果还不明白,建议你还是看书得了。至少看了书,这样的问题就不用再问了。