ASTQueryTranslatorFactory weblogic10.3 org.hibernate.hql.ast.HqlToken报错问题

在使用Hibernate二级缓存时,由SQL切换到HQL导致报错。解决方法是修改Hibernate配置,使用ASTQueryTranslatorFactory,并引入antlr-2.7.6.jar。但在Weblogic10.3中由于jar包冲突,需要删除冲突的库或者通过设置环境变量避免冲突。文中提供了多种解决方案,包括修改Hibernate配置、调整Weblogic的类加载顺序以及修改setDomainEnv.sh脚本。

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

原有工程里面都是使用sql 然后从session获取连接来进行修改和删除操作,但是使用了hibernate二级缓存,使用sql,二级缓存查询的数据不能实时变更,然后改成hql语句来操作,会报错,


然后修改

<!-- hibernate 查询语言为3.X版本 -->
<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
<!-- hibernate 查询语言为2.X版本 -->
<!--<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>-->


修改完成之后需要导入antlr-2.7.6.jar ,但是启动报错,

org.springframework.orm.hibernate3.HibernateQueryException:ClassNotFoundException:

org.hibernate.hql.ast.HqlToken

        由是在网上开始海找试过好多也走了不少弯路,终于解决了。

 

我的解决方法是:(windows环境下好使,linux环境下删除这两个包起不来)

问题就是jar包冲突hibernate3需要antlr-2.7.6.jar的支持,而在weblogic10.3我的安装目录

“D:\bea\modules”下有两个jar和工程里的jar(antlr-2.7.6.jar)包冲突将weblogic10.3中jar包删除

(com.bea.core.antlr_2.7.7.jar、com.bea.core.antlr.runtime_2.7.7.jar)就可以了。


aix AIX TESTKF 1 7 00CE0CAF4C00 和linux下不行,

下删除了两个包之后报异常,不能启动,最后测试使用方法

/home/eteller/base_domain/bin/ 目录下面 修改setDomainEnv.sh

增加

PRE_CLASSPATH="/home/eteller/app/ETeller/WEB-INF/lib/antlr-2.7.6.jar"
export PRE_CLASSPATH


重启服务后解决,

 

因每个人的问题和使用的版本不同解决方法也有所不同,所以把网上其它解决方法也整理出来了,供大家参考。

解决方法一:(需要使用3这种解析器,所以不能使用)

如果你使用的是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>两者区别网上好多谷歌一下。



解决方法二:(weblogic 10.3无效)

设置在“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.cmd或startWebLogic.cmd文件打开找到set CLASSPATH上面加

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

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

 

以上仅供参考!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值