拥有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查询翻译器属性
解决方法二: 设置在“D:\bea\wlserver_10.3\server\lib\consoleapp\webapp\WEB-INF”下的weblogic.xml文件
解决方法三: 设置我的目录“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%
--------------------------------------------------------------------------------------------------
此问题的核心问题目前来看是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的写法问题
- 直接写String sql = "from ClientInfo as a where a.client_name like '%"+ clientname+"%'");
- Query repeatClientQuery=querysession.createQuery(sql);
- 成功.但是却不能查询中文,假如clientname是客户1名字的话,那么将查不到结构,
- 解决办法:1.用占位符:
- Query query = session
- .createQuery("select count(*)
- from Privilege p where p.name like ?");
- query.setString(0, "%" + name + "%");//
- 注意这里不能写成setString(0," '%" + name + "%' ";
- 否则查不出来结果,不能加‘单引号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