hql查询 给定默认值 控制台打印sql语句出现乱码例如:hql ="from TservercameraUtil where cameraname like '类型%'"";getHibernateTemplate().find(hql);控制台打印 sql语句查询出现乱码   
select tservercam0_.CAMERAID as CAMERAID, tservercam0_.CAMERANAME as CAMERANAME54_, tservercam0_.LOGICID as LOGICID54_, tservercam0_.MAPID as MAPID54_, tservercam0_.MAPNAME as MAPNAME54_, tservercam0_.PARENTID as PARENTID54_, tservercam0_.AREAID as AREAID54_, tservercam0_.AREANAME as AREANAME54_ from TSERVERCAMERA tservercam0_ where tservercam0_.CAMERANAME like '?à??%'spring配置文件 配置
<prop key="hibernate.query.factory_class">
  org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>这句就没事了  
但会影响其它查询 出现乱码 不知道有没其它解决方法 在此谢谢了!!!!!!

解决方案 »

  1.   

    web.xml  我的编码是GBK,如是UTF—8那就要改
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.common.SetEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>gbk</param-value>
    </init-param>
    </filter>package com.common;import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;/**
     * 
     * 字符集过滤器
     */
    public class SetEncodingFilter
        implements Filter {
        protected String encoding = null;
        protected FilterConfig filterConfig = null;
        protected boolean ignore = true;    public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }    public void doFilter(
            ServletRequest request,
            ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
            if (ignore || (request.getCharacterEncoding() == null)) {
                request.setCharacterEncoding(selectEncoding(request));
            }
            chain.doFilter(request, response);
        }    public void init(FilterConfig filterConfig) throws ServletException {        this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
        }    protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }    public FilterConfig getFilterConfig() {
            return filterConfig;
        }    public void setFilterConfig(FilterConfig filterConfig) {
            this.filterConfig = filterConfig;
        }}
    按这样就没事了
      

  2.   

    不好意思,LZ,还有一个忘加上去了,最后就是每个页面编码要统一 <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  3.   

    页面和类统一用GBK 别get请求传中文
      

  4.   


    不是页面的原因 已经给定默认值 好像是hibernate的事
      

  5.   

    hibernate的语句没事的 只要不影响就好
      

  6.   


    恩 先谢谢了 但我是用dwr传的值 况且我先已测试给定默认值查询 控制台打印sql语句出现乱码。
      

  7.   


    跟过滤器没关系 我已给定默认值 是hibernate的事 
      

  8.   


    <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>*.html,*.jsp,*.do,*.action,*.*</url-pattern>
    </filter-mapping>
    应该不是Hibernate的问题。 
      

  9.   


    不行的 还是乱码 
    首先 我已给定默认值 执行hibernate 查询 控制台打印sql语句是乱码
      

  10.   

    你的hibernate版本是多少 ?
    百度说 HSQL语句中中文不能使用是Hibernate3.01的一个BUG
      

  11.   

    要是不配置
    <prop key="hibernate.query.factory_class">
      org.hibernate.hql.classic.ClassicQueryTranslatorFactory
    </prop>
    其它查询语句没事我的hql语句就是乱码
      

  12.   

    换版本啊,去下个别的版本的jar文件
      

  13.   


    是用svn提交到服务器 
    配置
    <prop key="hibernate.query.factory_class">
      org.hibernate.hql.classic.ClassicQueryTranslatorFactory
    </prop>
    查询语句没事其它查询出现乱码
      

  14.   

    看看action中的值是不是乱码,如果是那就配置过滤器处理字符集。如果不是你就手动转码,
    String word = new String(patternWord.getBtye("ISO-8859-1"),"GBK/UTF-8");
      

  15.   


    我已给定默认值的 值是定位的 hql ="from TservercameraUtil where cameraname like '类型%'"";
      

  16.   

    在hibernate中配置中文条件的查询代码  具体的我忘记了   查一下就知道了
      

  17.   

    你确定你是这个版本 那就升级一下你的hibernatejar包版本
    我用的hibernate3.jar 没问题
      

  18.   

    自己写一个拦截器,写到struts2上面就可以了
      

  19.   

    全部改为UTF-8看看,数据库的编码也改为UTF-8
      

  20.   

    恩 我们用的也是hibernate3.jar这个包 
      

  21.   


    跟数据库没关系 hibernate的事
      

  22.   


    用的是oracle 跟数据库没关系的
      

  23.   

    也不知道你的问题解决没有,上面我看到有人说了这可能是3.0的BUG,也不知道你用的是不是3.0的,3.1的已经解决这样的问题了。我的解决办法是通过参数的方法。String str="类型";
    hql ="from TservercameraUtil where cameraname like :param";
    Query query = getSession().createQuery(hql);
    query.setString("param", "%" + str + "%");
    query.list();这样应该能解决。