代码:@Controller("/control/product/type/list")
public class ProductTypeAction extends Action {
    @Resource(name="productTypeDAOBean")
private ProductTypeDAO productTypeDAO;
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ProductTypeForm formbean=(ProductTypeForm)form;
StringBuffer jpql=new StringBuffer("o.visiable=?1");
List<Object>params=new ArrayList<Object>();
params.add(true);
if("true".equals(formbean.getQuery())){
if(formbean.getName()!=null&&!"".equals(formbean.getName().trim())){
jpql.append(" o.name like ?"+(params.size()+1));
params.add("%"+formbean.getName()+"%");
}
}else{
if(formbean.getParentid()!=null&&formbean.getParentid()>0){
jpql.append(" and o.parent.typeid=?"+(params.size()+1));
params.add(formbean.getParentid());
}else{
jpql.append(" and o.parent is null");
}

}
PageView<ProductType> pageView=new PageView<ProductType>(5,formbean.getPage());

int firstindex=(pageView.getCurrentpage()-1)*pageView.getMaxresult();
LinkedHashMap<String,String> orderby=new LinkedHashMap<String, String>();
orderby.put("typeid", "desc");
QueryResult<ProductType> qr=productTypeDAO.getScrollData(ProductType.class, firstindex, 
pageView.getMaxresult(), jpql.toString(), params.toArray(), orderby);
pageView.setQueryResult(qr);
request.setAttribute("pageView", pageView);
return mapping.findForward("list");
}
}出现的异常:java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V
at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:655)
at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2586)
at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2542)
at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2341)
at org.hibernate.hql.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2296)
at org.hibernate.hql.antlr.HqlBaseParser.expression(HqlBaseParser.java:2082)
at org.hibernate.hql.antlr.HqlBaseParser.logicalExpression(HqlBaseParser.java:1858)
at org.hibernate.hql.antlr.HqlBaseParser.whereClause(HqlBaseParser.java:454)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:708)
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:248)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
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:1623)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
at sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:358)
at $Proxy36.createQuery(Unknown Source)
at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:197)
at $Proxy16.createQuery(Unknown Source)
at com.iwtxokhtd.shop.service.dao.BaseDAOSupport.getScrollData(BaseDAOSupport.java:65)
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:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy18.getScrollData(Unknown Source)
at com.iwtxokhtd.shop.web.action.product.ProductTypeAction.execute(ProductTypeAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.iwtxokhtd.shop.web.filter.SetEncodingFilter.doFilter(SetEncodingFilter.java:23)
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:175)
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:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)试用是什么原因?

解决方案 »

  1.   

    从异常信息来看,是缺少HqlBaseParser.recover()方法。如果楼主的代码及配置无误,应该是缺少某个jar文件,或是jar文件的版本不符所致。楼主请先按这个提示找找原因。另外,既然是使用JPA,请楼主把你的persistence.xml中的配置内容贴出来。
    看看是不是配置有问题?或许对解决你的问题有所帮助。因为根据你的异常信息来看,我怀疑你用的不是JPA,而是Hibernate3.2,这两者之间在查询语句的书写上是有区别的。
    你写的是EJB-QL(或者姑且可以叫做JPA-QL),如果当作HQL解析,肯定就出问题啦。呵呵。
      

  2.   

    换个最新的jar 应该是jar版本问题
      

  3.   

    hibernate3.0以上版本就有这个方法的,换个jar吧.
      

  4.   

    下面的注释有问题:
    @Resource(name = "productTypeDAOBean")
    private ProductTypeDAO productTypeDAO;找不到你的productTypeDAOBean,你看看你的这个JNDI是远程接口(remote)还是本地的(Local).productTypeDAOBean/remote
    productTypeDAOBean/Local
      

  5.   

    java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V antlr的版本不对,你换最新的,同时删除所有重复的
      

  6.   

    换包什么的我都试过,问题不在这,在SQL语句中少写了个and ,这个问题在我发贴后发现了,还是谢谢大家的建议
      

  7.   

    我在hibernate源码调试时也遇到这问题了!
      

  8.   

    参考
    http://www.cctieba.cc/tiezi.aspx?tieziId=304
      

  9.   

    我也出现了这个问题,检查了一下,发现是HQL语句少了个where