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

本文解决了一个在使用Hibernate3.jar部署到WebLogic8.1时出现的异常问题,通过调整hibernate.properties文件或spring的context.xml配置,避免了weblogic.jar中的antlr.jar与应用中使用的antlr.jar之间的冲突,最终成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  郁闷了一天的问题,终于在夜幕降临前得到解决,开心~~
   拥有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项目毫无进展,终于解决了~~


前几天我也遇到这样的问题,weblogic 8.1.4

类似org.hibernate.hql.classic.ClassicQueryTranslatorFactory解释不了HQL语句
如:order by attribute_name
它报错说表没有这样的字段(属性名与字段不一样)


出错原因

在hibernate3中需要用到antlr,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载

的错误,无法找到在war或者ear中的hibernate3.jar。
出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。

参考:
http://blog.chinajavaworld.com/entry.jspa?id=829 


官方的解决办法是在web-inf下创建一个weblogic.xml,配置
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>

让weblogic在冲突情况下,默认采用web应用下的lib,而不采用它本身classpath下的jar包即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值