struts 1 与hibernate3在weblogic8(jdk1.4)上运行正常,我把程序部署在weblogic10(jdk1.6)上以后,在执行到HibernateSessionFactory.getSession().createQuery(hql)时报以下错误:
 
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from com.huawei.r2mp.dbo.Parameter where 1=1 and groupId=:groupId and paramId=:paramId and paramId<>'NG']
at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:57)
at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:31)
at antlr.CharScanner.<init>(CharScanner.java:51)
at antlr.CharScanner.<init>(CharScanner.java:60)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
at org.hibernate.hql.ast.HqlLexer.<init>(HqlLexer.java:26)
at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:44)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:232)
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.huawei.r2mp.common.DataSources.getObjects(DataSources.java:162)
at com.huawei.r2mp.dao.ParameterDAO.getParameterByGroupIdAndParamId(ParameterDAO.java:57)
at com.huawei.r2mp.userManager.LoginAction.subExecute(LoginAction.java:167)
at com.huawei.r2mp.common.BaseAction.execute(BaseAction.java:98)
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.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.huawei.r2mp.common.SessionCheckFilter.doFilter(SessionCheckFilter.java:45)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
哪位大侠给指点一下?多谢!

解决方案 »

  1.   

    org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken
    你weblogic10下没导入有hibernate3.jar?
      

  2.   

      很明显。 是少hibernate的架包了。  把你的hibernate 的架包全更新下换成最新的jar, 
      

  3.   

    weblogic部署的工程的WEB-INF\lib下有hibernate3.jar。改成HibernateSessionFactory.getSession().createSqlQuery(sql)没问题。
      

  4.   

    但没理由啊,它明明是报的ClassNotFoundException你说改成什么没问题?你没写错吧?改这个和上面那个一样的。
      

  5.   

    是不一样,一个是createQuery(sql),一个是createSqlQuery(sql)。在weblogic10下需要什么单独的配置吗?
      

  6.   

    createQuery用的hql语句进行查询,createSqlQuery用sql语句查询返回值也不一样,hql的返回你定义的bean对象list,sql返回的是数组形式的。但问题是你语句是hql的,反而用createSqlQuery不出问题,我非常纳闷。
      

  7.   

    createSqlQuery当然是直接执行sql语句了,你没看我传的参数不一样。
      

  8.   

    问题解决了。现与童鞋们共享一下:
    错误原因: 在hibernate3中需要用到antlr,
      然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,
      无法找到在war或者ear中的hibernate3.jar。 出现这个错误之后,antlr会调用System.exit(),
      这样weblogic就会中止服务。 废话少说,解决办法:三个步骤 
      1:在用户工程代码web-inf下建立xml文件:weblogic.xml 
      <?xml version="1.0" encoding="UTF-8"?> 
      <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> 
      <weblogic-web-app>
    <container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
    </container-descriptor>
     </weblogic-web-app> 
     2:拷贝用户工程里的antlr-2.7.6rc1.jar到weblogic10目录: D:\bea\wlserver_10.0\server\lib 
     3:改造当前weblogic用户的startWebLogic.cmd set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6rc1.jar 
     set CLASSPATH=%SAVE_CLASSPATH%---------------------------原来的 set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%我这办公室不能上百度,不然也不用浪费一下午的时间了!悲催
      

  9.   


    照这样说createSqlQuery也应该会出错啊。
      

  10.   

    不是的,createSqlQuery(sql)是执行的原生态sql,不需要调用hibernate进行转换,所以就不报错。呵呵,猜的,不知道对不对。