关于从WEBLOGIC9升级到WEBLOGIC10遇到的问题

我原来的系统JDK版本是1.5,weblogic是9,最近突然想到把JDK升级到1.6,weblogic升级到10。weblogic10我个人没感觉到功能和稳定性哪些方面增强了。想升级到WEBLOGIC10源于WEBLOGIC控制后台的界面看起来比较顺眼 ,速度也快了不少且不用再破解(ORACLE收购BEA后把许可证那块取消了)。但就这么一个看视简单的问题,也让我弄了好几次。终于被我测试成功了。在调试过程中出现了两个错误让我来回折腾,感觉很不爽。我也在网上查了很多相关的资料。

当我在配置文件hibernate.cfg.xml中增加属性:

增加上述配置文件时在执行删除语句

session.createQuery("delete User u where u.name='Unmi'").executeUpdate();

报如下错误:

org.hibernate.QueryException: query must begin with SELECT or FROM: delete [delete com.unmi.User where u.name='Unmi']

原来旧的HQL语法解析器不支持 delete User 的写法,hibernate2在删除持久化对象时必须写成

session.delete("delete User u where u.name='Unmi'");

然而新的 org.hibernate.Session 的接口方法已去除了 Session.delete(String hql)方法

 

 

 

而取消如下配置属性:

 

<property name="hibernate.query.factory_class">
  org.hibernate.hql.classic.ClassicQueryTranslatorFactory </property>

却又报如下错误:

ClassNotFoundException: org.hibernate.hql.ast.HqlToken

 

想来想去我所有程序代码是一样的,升级过来没有动过一处代码,唯一区别就JDK版本和WEBLOGIC版本的改变,问题必须从这两方面思考去解决,这种错误肯定是与JDK无关的,从网上查了一些相关的资料大致确定是WEBLOGIC10自带antlr冲突的问题。我在WEBLOGIC目录下搜索antlr,结果在/bea/modules下搜索到两个相关的文件:

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

不管三七二十一,把这两个文件全部干掉,重启服务,运行程序后还是报

org.hibernate.QueryException: query must begin with SELECT or FROM: delete [delete com.unmi.User where u.name='Unmi']的错误,

这个不行我回过头把配置文件

<property name="hibernate.query.factory_class">
  org.hibernate.hql.classic.ClassicQueryTranslatorFactory </property>

也取消,重启服务运行程序后一切OK

 

总结:

我遇到的这个问题在WEBLOGIC9中只要配置如下属性(用2的查询器)即可解决

<property name="hibernate.query.factory_class">
  org.hibernate.hql.classic.ClassicQueryTranslatorFactory </property>

在网上大部分都是说采取上面的方法,但升级到10后配置上述属性在删除操作时会出错,这也可能是WEBLOGIC10的一个BUG吧,解决了这个问题也把HIBERNATE完全升级到3了,原来是还用到了HIBERNATE2的查询器,在批量操作时性能会受到一定的影响。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值