query+++++++++==========from News where id like'1000001%' and subject like '%3%' order by createTime desc
query=========111111from News where id like'1000001%' and subject like '%3%' order by createTime desc
Hibernate: select news0_.id as id61_, news0_.datelimit as datelimit61_, news0_.subject as subject61_, news0_.body as body61_, news0_.createtime as createtime61_, news0_.xmlfile as xmlfile61_, news0_.imgdocid as imgdocid61_ from news news0_ where (news0_.id like '1000001%') and (news0_.subject like '%3%') order by news0_.createtime desc limit ?
query=========111111
org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree []
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.aljoin.oa.core.persistence.HibernateGenericDao.createQuery(HibernateGenericDao.java:114)
at com.aljoin.oa.core.component.QueryManager.find(QueryManager.java:44)
at com.aljoin.oa.core.action.PageAction.calcNumber(PageAction.java:380)
at com.aljoin.oa.core.action.PageAction.calcNumber(PageAction.java:281)
at com.aljoin.oa.news.action.SearchAction.execute(SearchAction.java:44)
at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:283)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:166)
at com.aljoin.oa.core.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:54)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.aljoin.oa.base.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:51)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.opensymphony.webwork.lifecycle.RequestLifecycleFilter.doFilter(RequestLifecycleFilter.java:67)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.aljoin.oa.core.misc.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:19)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.aljoin.oa.core.misc.SessionCheckFilter.doFilter(SessionCheckFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: <AST>:0:0: unexpected end of subtree
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2943)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
... 56 more
网上查了好多,还是没有解决,我的HQL也没问题,放在数据库中是可以查出来的,可是在web页面就出异常

解决方案 »

  1.   

    searchAction.java里面的方法 
       public String execute()
            throws Exception
        {
            String query = "";
            String calNumQuery = "";
            String conditionSql = "";
            if(!title.equals(""))
                conditionSql = (new StringBuilder(String.valueOf(conditionSql))).append(" and title like '%").append(title).append("%'").toString();
            if(!creatorId.equals(""))
            {
                if(creatorId.endsWith(","))
                    creatorId = creatorId.substring(0, creatorId.length() - 1);
                conditionSql = (new StringBuilder(String.valueOf(conditionSql))).append(" and creator.id=").append(creatorId).toString();
            }
            if(!body.equals(""))
                conditionSql = (new StringBuilder(String.valueOf(conditionSql))).append(" and body like '%").append(body).toString();
            if(forumId.equals("0"))
            {
                query = (new StringBuilder("from Topic t where id like '")).append(OrgnizeService.getCompanyId()).append("%'").append(conditionSql).append(" order by createTime desc").toString();
                calNumQuery = (new StringBuilder("select count(t) from Topic t where id like '")).append(OrgnizeService.getCompanyId()).append("%'").append(conditionSql).toString();
            } else
            {
                query = (new StringBuilder("from Topic t where forum.id=")).append(forumId).append(conditionSql).append(" order by createTime desc").toString();
                calNumQuery = (new StringBuilder("select count(t) from Topic t where forum.id=")).append(forumId).append(conditionSql).toString();
            }
            list = calcPageList(query);
            calcNumber(calNumQuery);
            return "success";
        }
    queryManager.java里的方法
      private String combineQuery(String query) {
      System.out.println("query=========111111"+query);
        if (query.indexOf(":corpId") > 0)
        { query = StringUtils.replace(query, ":corpId", "'" + OrgnizeService.getCorpId() + "%" + "'");
        System.out.println("query=========222222"+query);
        }
        return query;
      }
      

  2.   

    为什么  query=========111111 打印了 2次?  第一次有 第2次没有,  这个是在线新闻里面查找时候出了问题的
      

  3.   

    你封装后的hql语句贴出来看一下!
      

  4.   

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

    <hibernate-mapping package="com.aljoin.oa.news.model">
    <class name="News" table="news" dynamic-update="true">
            <id column="id" name="id"  length="8" type="java.lang.Long">
    <generator class="com.aljoin.oa.id.DocId" />
    </id>
            <property column="datelimit" name="dateLimit" length="4" type="integer"/>
    <property column="subject" name="subject" length="100" type="string"/>
    <property column="body" name="body" type="string"/>
            <property column="createtime" name="createTime" type="timestamp"/>
    <property column="xmlfile" name="xmlFile" length="2000" type="string"/>
    <property column="imgdocid" name="imgDocId" length="2000" type="string"/>
            <!-- <many-to-one name="pubman" column="pubman" class="com.aljoin.oa.orgnize.model.User"/>
            -->
          </class>
    </hibernate-mapping>
      

  5.   

    感觉是语法上面有问题,获取是xml解析有问题,请LZ往这方面想想
      

  6.   

    查询格式有问题,我怀疑是你sql写错了什么,最好就是断点调试一下,看看是什么问题。
      

  7.   

    sql 没有错, 我 断点 到private String combineQuery(String query) {
          System.out.println("query=========111111"+query);
        if (query.indexOf(":corpId") > 0)
        { query = StringUtils.replace(query, ":corpId", "'" + OrgnizeService.getCorpId() + "%" + "'");
        System.out.println("query=========222222"+query);
        }
        return query;
      }
    第2次到这里 就出异常了, 也没看出哪里错误,唯一的 query 没东西。那应该报空指针异常的啊 
      

  8.   

    2L的searchAction 里面方法是电子公告里面的,是可以运行的。下面贴下在线新闻的 public String execute() throws Exception {
        this.isSystemAdmin = OrgnizeService.checkIsSysAdm();
        String query = "";
        String calNumQuery = "";
        String conditionSql = "";
        if (!(this.subject.equals("")))
          conditionSql = conditionSql + " and subject like '%" + this.subject + "%'";    if (!(this.pubmenId.equals(""))) {
          if (this.pubmenId.endsWith(","))
            this.pubmenId = this.pubmenId.substring(0, this.pubmenId.length() - 1);
          conditionSql = conditionSql + " and pubman.id=" + this.pubmenId;
        }
        if (!(this.timebegin.equals("")))
          conditionSql = conditionSql + " and createTime>='" + this.timebegin + "'";    if (!(this.timeend.equals("")))
          conditionSql = conditionSql + " and createTime<='" + this.timeend + "'";    query = (new StringBuilder("from News where id like'")).append(OrgnizeService.getCompanyId()).append("%'").append(conditionSql).append(" order by createTime desc").toString();
        System.out.println("query+++++++++=========="+query);
        list = calcPageList(query);
        calcNumber(calNumQuery); // 这里的calNumQuery是不是没有赋值啊。
        return "success";
      }和2L的 那个比较好像少了个 calNumQuery = (new StringBuilder("select count(t) from Topic t where forum.id=")).append(forumId).append(conditionSql).toString();我该 如何添加赋值?
      

  9.   

      calNumQuery = (new StringBuilder("select count(t) from News t where id like '")).append(OrgnizeService.getCompanyId()).append("%'").append(conditionSql).toString();
      
      
    这样