ClassNotFoundException: org.hibernate.hql.ast.HqlToken解决之道

郁闷了一天的问题,终于在夜幕降临前得到解决,开心~~
   拥有Hibernate3.jar的应用,被部署到weblogic8.1上后,抛出异常 CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken。
   解决方法:在hibernate.properties上,或是在spring的conext xml中,加上一个属性hibernate.query.factory_class,值为org.hibernate.hql.classic.ClassicQueryTranslatorFactory。

   原因:从网上获知,weblogic.jar中已经有了一个antlr.jar的版本,导致应用中hibernate3.jar中用到的antlr.jar不能找到,导致异常。
   被这个问题缠绕了一整天,使我的OA项目毫无进展,终于解决了~~

 

解决方法一: 如果你使用的是hibernate没用spring那你需要在hibernate.properties中设置否则在spring中设置hibernate查询翻译器属性 <prop key="hibernate.query.factory_class"> org.hibernate.hql.ast.ASTQueryTranslatorFactory </prop> <prop key="hibernate.query.factory_class"> org.hibernate.hql.classic.ClassicQueryTranslatorFactory </prop> Hibernate3.0   采用新的基于ANTLRHQL/SQL查询翻译器,不过,Hibernate2.1的查询翻译器也依然存在。在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。例如:  
 
 1)选择Hibernate3.0的查询翻译器:  
  hibernate.query.factory_class=   org.hibernate.hql.ast.ASTQueryTranslatorFactory  
 
 2)选择Hibernate2.1的查询翻译器  
  hibernate.query.factory_class=   org.hibernate.hql.classic.ClassicQueryTranslatorFactory  
 
 提示:ANTLR是用纯Java语言编写出来的一个编译工具,它可生成Java语言或者是C++的词法和语法分析器,并可产生语法分析树并对该树进行遍历。ANTLR由于是纯Java的,因此可以安装在任意平台上,但是需要JDK的支持。  
  Hibernate
开发小组尽力保证Hibernate3.0的查询翻译器能够支持Hibernate2.1的所有查询语句。不过,对于许多已经存在的应用,在升级过程中,也不妨仍然使用Hibernate2.1的查询翻译器。  
 
 值得注意的是,   Hibernate3.0的查询翻译器存在一个Bug:不支持某些theta-style连结查询方言:如Oracle8iOracleDialect方言、Sybase11Dialect。解决这一问题的办法有两种:(1)改为使用支持ANSI-style连结查询的方言,如   Oracle9Dialect,2)如果升级的时候遇到这一问题,那么还是改为使用Hibernate2.1的查询翻译器。

解决方法二: 设置在“D:\bea\wlserver_10.3\server\lib\consoleapp\webapp\WEB-INF”下的weblogic.xml文件 weblogic8.0解决这个问题是改更weblogic.xml把一个属性更为true <container-descriptor> ... <prefer-web-inf-classes>true</prefer-web-inf-classes> ... </container-descriptor>

解决方法三: 设置我的目录“D:\bea\wlserver_10.3\server\lib”放入antlr-2.7.6.jar且在weblogic.jar前面设置我的目录“D:\bea\user_projects\domains\base_domain\bin”下

setDomainEnv.cmdstartWebLogic.cmd文件打开找到set CLASSPATH上面加

set PRE_CLASSPATH=% DOMAIN_HOME%\lib\antlr-2.7.6.jar;

下而加set CLASSPATH=%PRE_CLASSPATH%;%SAVE_CLASSPATH%ATH%

--------------------------------------------------------------------------------------------------

此问题的核心问题目前来看是jar包冲突造成的,只需要把bea下的antlr的两个jar包移除即可完美解决。

 

============================================================================================================

/app/wls10/Oracle/modules

com.bea.core.antlr.runtime_2.7.7.jar和com.bea.core.antlr_2.7.7.jar与

工程antlr-2.7.6.jar冲突 

 

============================================================================================================

 

 

hibernate的like用法以及hibernate.query.factory_class的写法问题

  1. 直接写String sql = "from ClientInfo as a where a.client_name like '%"+ clientname+"%'");    
  2. Query repeatClientQuery=querysession.createQuery(sql);    
  3. 成功.但是却不能查询中文,假如clientname是客户1名字的话,那么将查不到结构,    
  4. 解决办法:1.用占位符:    
  5. Query query = session    
  6. .createQuery("select count(*)  
  7. from Privilege p where p.name like ?");    
  8. query.setString(0"%" + name + "%");//   
  9. 注意这里不能写成setString(0," '%" + name + "%' ";    
  10. 否则查不出来结果,不能加‘单引号2.修改查询编译器:

Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,    
     在Hibernate的配置文件中,hibernate.query.factory_class    
     属性用来选择查询翻译器。    
     (1)选择Hibernate3.0的查询翻译器:    
     hibernate.query.factory_class=    
     org.hibernate.hql.ast.ASTQueryTranslatorFactory    
     (2)选择Hibernate2.1的查询翻译器hibernate.query.factory_class=    
     org.hibernate.hql.classic.ClassicQueryTranslatorFactory

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

  <property name="hibernateProperties">
   <props>

。。。。

<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
     。。。。。。

</props>
  </property>
  <property name="configLocation" value="classpath:hibernate.cfg.xml"/>  
 </bean>

 

]

 

 

//最好办法

======================================================================================================================

 

weblogic10.3 中部署java应用程序时报错

org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

 

解决方法:

进入weblogic的安装目录,修改setDomainEnv.sh文件中的参数PRE_CLASSPATH(红色字体)

[root@localhost bin]# cd /bea/weblogic/user_projects/domains/mydomain/bin
[root@localhost bin]# ls
nodemanager  server_migration  service_migration  setDomainEnv.sh  startManagedWebLogic.sh  startWebLogic.sh  stopManagedWebLogic.sh  stopWebLogic.sh
[root@localhost bin]# vi setDomainEnv.sh

#!/bin/sh

PRE_CLASSPATH=/bea/user_projects/domains/mydomain/applications/appName/WEB-INF/lib/antlr-2.7.6rc1.jar:
export PRE_CLASSPATH
# WARNING: This file is created by the Configuration Wizard.
# Any changes to this script may be lost when adding extensions to this configuration.

# --- Start Functions ---

BP=100
SP=$BP

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值