以下的hql有什么问题啊?
select ui,ucl.xxx as st from UserInfo ui,
(select userId as zzz,max(studyTime) as xxx from UserCourseLog group by userId) ucl
where ui.admintype=0 and ui.id=ucl.zzz(+) order by decode(st,null,1)desc,st desc;报错信息:
[2009-10-29 09:51:36] [http-8888-1] ERROR - line 1:15: unexpected token: ( 
[2009-10-29 09:51:36] [http-8888-1] ERROR - Dispatch[/stumanage] to method 'stuManageList' returned an exception 
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.onevr.gdrct.web.filter.EncodingFilter.doFilter(EncodingFilter.java:45)
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: java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
at org.hibernate.hql.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1590)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1408)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
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.onevr.gdrct.dao.impl.BaseHibernateDao.findObjectListsByPage(BaseHibernateDao.java:356)
at com.onevr.gdrct.dao.impl.user.UserInfoDaoImpl.selectUserInfoList2(UserInfoDaoImpl.java:143)
at com.onevr.gdrct.service.impl.user.UserInfoServiceImpl.getUserInfoList(UserInfoServiceImpl.java:79)
at com.onevr.gdrct.web.servlet.user.StuManageAction.stuManageList(StuManageAction.java:201)
... 27 more
2009-10-29 9:51:36 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
at org.hibernate.hql.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1590)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1408)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
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.onevr.gdrct.dao.impl.BaseHibernateDao.findObjectListsByPage(BaseHibernateDao.java:356)
at com.onevr.gdrct.dao.impl.user.UserInfoDaoImpl.selectUserInfoList2(UserInfoDaoImpl.java:143)
at com.onevr.gdrct.service.impl.user.UserInfoServiceImpl.getUserInfoList(UserInfoServiceImpl.java:79)
at com.onevr.gdrct.web.servlet.user.StuManageAction.stuManageList(StuManageAction.java:201)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.onevr.gdrct.web.filter.EncodingFilter.doFilter(EncodingFilter.java:45)
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)

解决方案 »

  1.   

    select ui,ucl.xxx as st from UserInfo ui,
    (select userId as zzz,max(studyTime) as xxx from UserCourseLog group by userId)ucl
    where ui.admintype=0 and ui.id=ucl.zzz(+) order by decode(st,null,1)desc,st desc; 
      

  2.   

    and ui.id=ucl.zzz(+) ????
    hql里面的联接可以这么写吗? 学习一下。
      

  3.   

    检查了,,没有错,只是这句
    (select userId as zzz,max(studyTime) as xxx from UserCourseLog group by userId) ucl 
    是查询出来的子表
    UserInfo与UserCourseLog 是1:N的关系,
    UserInfo表
    id     name
    1      111 
    2      222UserCourseLog表
    id     userID    studyTime
    1         1        30
    2         1        40
    3         2        20
    4         2        30要查出的结果是
    id     name   studyTime
    1      111     40
    2      222     30用 select ui,ucl.xxx as st from UserInfo ui, 
    (select userId as zzz,max(studyTime) as xxx from UserCourseLog group by userId) ucl 
    where ui.admintype=0 and ui.id=ucl.zzz(+) order by decode(st,null,1)desc,st desc; 
    在pl/sql执行OK,放到hql就报错了。 
      

  4.   

    (+)是Oracle特有的连接语句
    用left outer join代替试试看。
      

  5.   

    试了,不行
    报错是在进行子查询的时候(select userId as zzz,max(studyTime) as xxx from UserCourseLog group by userId) ucl 
      

  6.   

    怎么都没有人理我啊,,,help!!!I need your help!!!
      

  7.   

    hql语法都错了
    hql中没有select
    而且用法也不正确,没看到具体代码难得诊断
    你的程序中不止一个错误
      

  8.   

    在hql语句中,from是不支持子查询的,而where才支持子查询。
    就是说你的子查询写在where后就好了! 
       如: select a from A a,(select b from B b,C c where b.id=c.id) d 
           where a.id=d.id; 
      应该为:select a from A a where a.id in (select b.id from B b,C c 
           where b.id=c.id); 
      

  9.   

    select ui.name, sum(uc.studyTime) as studyTime from UserInfo ui,UserCourseLog uc where ui.id=uc.userId group by ui.name给你测试的sql语句 你换成hql  类名 属性吗对着bean改了看看
      

  10.   

    hibernate的hql不支持子查询的,也不支持特殊的如oracle的+方式连接可以通过left join但必须是这两个表是关联表,要不然也会报错的。
      

  11.   


    可是这样查询出来的数据不完整啊,要查询出UserInfo表的所有数据
      

  12.   

    我用hql还是写不出复杂的查询语句,改用ibatis了,,,谢谢各位啦,,,
      

  13.   

    部分同意12/13楼同学的说法,这个问题我刚好遇到,研究了大半天才发现,其实hql可以左右内联,有迫切式左外联等写法,加上fetch 关键字 left join fetch,也可以select b.bookName,o.oId from book as b,order as o where b.b_i_d=o.b_i_d 这类方式去实现,经过研究发现,这样的做法在hql里面感觉有些乱,不利于组织,分页这块将是个问题,如果实现分页带保留查询条件复杂度又会提升,所以,基于今天的总结,我觉得用视图是个不错的解决办法,什么查询条件与查询一张表一样,问题复杂度一下就降下来了,而且速度似乎快一些,但要注意的一个小问题是,基于SSH开发时,逆向视图将会多出一个类,原因是视图没有主键,你得给视图加上主键,请参考ORACLE帮助文档,一下就找到了,ok,小小经验,抛砖引玉...