在一个ssh demo 中 业务逻辑层 中 写的 String hql = "from Account user where user.employeeName = '"+object.getEmployeeName()+"'";调用dao层的 search() super.getHibernateTemplate().find(hql)   居然没有查询出结果, 我用sql 测试过了 数据是确实存在的,   而hql语句经过 System 输出到 console 也没有问题   看看DAO层的hql语句 : from Account user where user.employeeName = '刘总'郁闷这个super.getHibernateTemplate().find(hql) 哪里出了问题看了上面的import org.springframework.orm.hibernate3.support.HibernateDaoSupport  这个包也没问题的

解决方案 »

  1.   

    你把输出的from Account user where user.employeeName = '刘总' 
    这句话直接放到sql里,试试能不能成功,如果能成功那就无语了
      

  2.   

    String hql = "from Account user where user.employeeName = '"+object.getEmployeeName()+"'";
    这样写是错误的
    getHibernateTemplate.find("from Account user where user.employeeName =?",object.getEmployeeName());
    这样就可以了
      

  3.   


    我写的那个hql 是 hql 语句 ....  怎么可能放到sql 中去执行呢?
      

  4.   


    这位朋友的方法我还没试过, 不过按照您的那种方法去写的话, 又不是我的习惯, 比较我习惯了在 Service层中 写 查询语句, 传进DAO中 .
      

  5.   

    String hql = "from Account user where user.employeeName ="+object.getEmployeeName();
      

  6.   


    你设置一下把sql语句打印出来,用那个sql语句去数据库里执行一下
      

  7.   


    您这方法打印出来的效果是 这样的from Account user where user.employeeName = 刘总后面的字符串没了 ''
      

  8.   

    我真服了 from Account 就没有问题, 证明是我的hql有问题  但是String hql = "from Account user where user.employeeName = '"+object.getEmployeeName()+"'"; 究竟错在哪里了呢?
      

  9.   

    LZ这样写试试:
    getHibernateTemplate.find("from Account user where user.employeeName =?",object.getEmployeeName()); 
      

  10.   

    我在业务逻辑层的方法中这样写 Java代码 
    public boolean isLoginSuccess(Account object) {   
            // TODO Auto-generated method stub   
            String hql = "from Account ";   
            System.out.println("看看业务逻辑层的hql"+hql);   
            List list = commonDAO.search(hql);   
            System.out.println("业务逻辑层这边的城市"+list.size());   
            if(list.size() > 0){   
                Account item = (Account)list.get(0);   
                if(object.getEmployeePwd().equals(item.getEmployeePwd())){   
                    return true ;   
                }   
            }   
            return false ;   
        }  
    在DAO层方法是这样的  
    public List search(String hql) {   
            // TODO Auto-generated method stub   
             System.out.println("看看dao层的"+hql);   
             List temp = super.getHibernateTemplate().find(hql);   
             for(int i = 0 ; i < temp.size(); i++){   
                 Account user = (Account)temp.get(i);   
                 System.out.println(user.getEmployeeName());                
             }   
             System.out.println("看看dao层的"+temp.size());   
             return temp ;   
        }  想用全部查询来测试是否能够成功查询出Account 表中的 数据 , 结果是可以的 业务逻辑中方法改回这样 String hql = "from Account account where account.employeeName = '"+object.getEmployeeName()+"'"; 就不行了 console 没输出数据 , list.size() 的输出结果是 0 我在ms sqlserver 的查询分析其中使用 
    select * from Account where EmployeeName = '刘总'   就查询出数据 自己也在dao层的方法中使用System.out.println(); 输出方法中使用 hql 语句,  都是很正常的, 会不会是hql 到了 ms sqlserver中 它的中文条件 '刘总' 被转义成了乱码 而不会从数据库中获取数据呢? 
      

  11.   

    利用log4j。properties 文件  和 在 applicationContext.xml中设置了<pro key="hibernate.show_sql">true</pro>  在 console 中输出了 被转义后的sql语句select account0_.EmployeeID as EmployeeID, account0_.EmployeeName as Employee2_0_, account0_.EmployeePwd as Employee3_0_, account0_.EmployeeRight as Employee4_0_, account0_.Re as Re0_ from xindunoadb.dbo.Account account0_ where account0_.EmployeeName='??×?'很明显被转义后的查询条件成了乱码 这是怎么造成的呢?我在web.xml是这样写的<filter>
       <filter-name>encodingFilter</filter-name>
       <filter-class>
       org.springframework.web.filter.CharacterEncodingFilter
       </filter-class>
       <init-param>
       <param-name>encoding</param-name>
       <param-value>utf-8</param-value>
       </init-param>
       <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
       </init-param>
      </filter>
      <filter-mapping>
       <filter-name>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>怎么还会出现乱码呢?
      

  12.   

    可能是你的MYSQL的编码问题...
      

  13.   


    我用的是ms sqlserver 2000该怎么设置呢?
      

  14.   

    不是你sqlserver的问题。你的sql已经出来了,本身你传过去的就是一个乱码,让他怎么和数据库相比较呢?不相信的话,可以用一个英文试试,一定是成功的。如果成功,就将你传过来的中文getBytes转成和你sqlserver一样的。sqlserver用utf8,你这里也转成utf8。。
      

  15.   


    英文的我试过了 成功了 ms sqlserver 用的是utf-8么? 我的filter 使用的就是utf-8  jsp页面也是utf-8
      

  16.   

    是不是需要在 applicationContext.xml中的 sessionFactory 中 配置这个呢?<prop key="connection.characterEncoding">utf8</prop>  
    <prop key="connection.useUnicode">true</prop>  
      

  17.   

    我配置
     <prop key="connection.characterEncoding">utf8</prop>  
     <prop key="connection.useUnicode">true</prop> 没有变化.....复制一下我使用log4j.properties 在consosle 输出的结果 :
    08:56:02,046 DEBUG QueryTranslatorImpl:177 - HQL: from com.newshieldoa.common.pojo.Account account where account.employeeName = '刘总' and account.employeePwd = '.'
    08:56:02,046 DEBUG QueryTranslatorImpl:178 - SQL: select account0_.EmployeeID as EmployeeID, account0_.EmployeeName as Employee2_0_, account0_.EmployeePwd as Employee3_0_, account0_.EmployeeRight as Employee4_0_, account0_.Re as Re0_ from xindunoadb.dbo.Account account0_ where account0_.EmployeeName='??×?' and account0_.EmployeePwd='.'
      

  18.   

    现在的问题就是 hql 转到 sql 语句之后的中文乱码问题了     期待答案
      

  19.   

    我知道什么问题啦  String hql = "from Account user where user.employeeName = '"+object.getEmployeeName()+"'"; 你把你的别名user改成别的名称应该就没问题了,因为user与系统中的名称重名了呵呵
      

  20.   


    这你希望你说的是对的 ,但是很明显您没有仔细看过我的回复 我早就把user 改成了 account .....
      

  21.   

    楼层太多,没都看完.object.getEmployeeName()应该是得到String类型吧`LZ把=改成like试试.getHibernateTemplate.find("from Account user where user.employeeName like ?",object.getEmployeeName()); 
      

  22.   


    按照这位说的 我在dao层 另外写了一个方法进行测试
    return super.getHibernateTemplate()
    .find("from Account account where account.employeeName like ?",item.getEmployeeName());dao层使用System.out.println() 输出测试了下 数据被正常查询出来了  , 但是我不习惯在dao层组织 hql 语句 , 组织的工作我想要放到Service中去 , 难道想要完成这个功能就只能在dao层组织hql 语句了么?
      

  23.   

    我的上帝啊 终于不是乱码了  !!!!!!!!!!!!!!11在 applicationContext.xml 中 
    sessionFactory 的配置信息中 配置了这样一段代码就搞定了
    <prop key="hibernate.query.factory_class">  
        org.hibernate.hql.classic.ClassicQueryTranslatorFactory   
    </prop>快2天了 终于把这该死的问题搞定了.  做个标记 ,为自己, 为别人.
      

  24.   

    兄弟,你的查询语句写错了,我发给你一个网址,你看看上面的例子就明白了!
    http://john521.javaeye.com/blog/517759
      

  25.   

    我也是这个问题。我调用DAO中的方法。也是显示不空
      

  26.   

    你把你的引用名称该一下,不要用user
      

  27.   

    你是个杯具。。看了Hql半天。终于明白我HQL错了是因为我没打单引号!~
    谢谢杯具楼主!~
      

  28.   

    http://blog.csdn.net/gabriel80/article/details/2440549