Weblogic和hibernate3異常:ClassNotFoundException: org.hibernate.hql.ast.HqlToken
2009年08月25日 星期二 12:37
在做項目的時候,我用weblogic跑了一下自己的程序(開發一直在tomcat下),發現出現了這樣的問題,
ClassNotFoundException: org.hibernate.hql.ast.HqlToken ,郁悶了半天,在tomcat下沒有任何錯誤,為何到weblogic就有問題了呢?
在百度和google上搜了好久,換了n個關鍵詞,才搜到原因如下:
原因:
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
為了使用3.0的批量更新和刪除功能,只能選擇(1)否則不能解釋批量更新的語句,當使用的時候出現了不支持條件輸入中文的情況。
選擇(2)可以支持輸入中文,但沒法解釋批量更新語句了
在hibernate3中需要用到antlr,然而這個包在weblogic.jar中已經包含了antrl類庫,就會產生一些類加載的錯誤,
無法找到在war或者ear中的hibernate3.jar。
出現這個錯誤之后,antlr會調用System.exit(),這樣weblogic就會中止服務。
原來是沖突了,解決方法也很簡單,就是添加
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>
這個屬性后,就可以解決這個問題了。
有一個人的博客上寫的也是也這個方法,不過他的org.hibernate.hql.classic.ClassicQueryTranslatorFactory寫錯了,
害的我以為這個方法不能用了,結果看看了,是他上面寫錯了,下面的是正確的,郁悶的是我拷貝的是上面的,最總還是被我發現了。
轉 http://hi.baidu.com/lei55022033/blog/item/b20ad52c8c9f7ae58b139940.html
|