高分求高手解决:org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree []

win720520 2009-04-27 11:00:16
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页面就出异常
...全文
1787 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a345067 2010-08-12
  • 打赏
  • 举报
回复
看看,我也碰到相同问题
win720520 2009-04-27
  • 打赏
  • 举报
回复
<?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>
montao 2009-04-27
  • 打赏
  • 举报
回复
你封装后的hql语句贴出来看一下!
win720520 2009-04-27
  • 打赏
  • 举报
回复
为什么 query=========111111 打印了 2次? 第一次有 第2次没有, 这个是在线新闻里面查找时候出了问题的
win720520 2009-04-27
  • 打赏
  • 举报
回复
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;
}
win720520 2009-04-27
  • 打赏
  • 举报
回复
OK 问题解决 如上所说
lich720520 2009-04-27
  • 打赏
  • 举报
回复
  calNumQuery = (new StringBuilder("select count(t) from News t where id like '")).append(OrgnizeService.getCompanyId()).append("%'").append(conditionSql).toString();


这样
win720520 2009-04-27
  • 打赏
  • 举报
回复
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();

我该 如何添加赋值?
win720520 2009-04-27
  • 打赏
  • 举报
回复
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 没东西。那应该报空指针异常的啊
ben0759 2009-04-27
  • 打赏
  • 举报
回复
查询格式有问题,我怀疑是你sql写错了什么,最好就是断点调试一下,看看是什么问题。
victorxiang 2009-04-27
  • 打赏
  • 举报
回复
感觉是语法上面有问题,获取是xml解析有问题,请LZ往这方面想想

67,546

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧