我尝试执行HQL时ClassNotFoundException:org.hibernate.hql.ast.HqlToken

时间:2013-07-23 19:33:49

标签: spring hibernate

当我尝试在代码中执行HQL时发生以下异常。我在各个站点检查了这个,发现antlr.2.7.6.jar shd在类路径中。我在我的项目中检查了这一点,发现我的Maven依赖项中存在这个问题。所以不应该有这样的问题。但我仍然遇到这个问题。谁能在这方面帮助我。我在“empList = getHibernateTemplate()。find(”from Employee“);”行中收到此错误在以下功能中。

public List<EmployeeTO> getAllEmp() {
    List<Employee> empList =  new ArrayList<Employee>();
List<EmployeeTO> empListTO =  new ArrayList<EmployeeTO>();
empList = getHibernateTemplate().find("from Employee");
try {
    BeanUtils.copyProperties(empListTO, empList);
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}
    return empListTO;
}

异常堆栈跟踪:

Root cause of ServletException.
     org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from com.myapp.domain.Employee]; nested exception is org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from com.myapp.domain.Employee]
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:656)
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
    Truncated. see log file for complete stacktrace
Caused By: org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from com.myapp.domain.Employee]
    at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:80)
    at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
    at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:54)
    at antlr.CharScanner.<init>(CharScanner.java:51)
    at antlr.CharScanner.<init>(CharScanner.java:60)
    Truncated. see log file for complete stacktrace

5 个答案:

答案 0 :(得分:2)

我在weblogic 10.3中遇到过这个问题,在应用程序类路径中有antlr-2.7.7.jar,并且能够通过添加&#34; antlr。*&#34;的prefer-application-packages来解决它。在weblogic-application.xml文件中。

答案 1 :(得分:1)

我解决了这个问题。目前我正在使用weblogic 12c和Hibernate 3.6.9。

在其中一个网站中,我发现我们需要在weblogic antlr.2.7.6.jar路径变量中添加pre_compile文件。

  1. Weblogic 12c:对于符合Java EE 6的Weblogic版本,我们只需要添加antlr jar依赖。
  2. 下载并将以下文件放在<WL_HOME>/common/lib/antlr-2.7.7.jar
  3. 在classpath中添加上述文件
  4. 适用于Windows:

    /common/bin/commEnv.cmd

    中添加以下行
    set PRE_CLASSPATH=%WL_HOME%/common/lib/antlr-2.7.7.jar
    

    对于Linux:

    /common/bin/commEnv.sh

    中添加以下行
    <WL_HOME>/PRE_CLASSPATH=$WL_HOME/common/lib/antlr-2.7.7.jar
    

    导出PRE_CLASSPATH

    我在我的窗口机器上执行了这些步骤。对于我的情况, wl_home common / lib 中设置为C:\Oracle\Middleware\wlserver_12.1v

    我添加了这个jar并在 /common/bin/commEnv.cmd 中添加了set PRE_CLASSPATH=%WL_HOME%/common/lib/antlr-2.7.7.jar代码并重新启动了weblogic。这对我来说很好。

答案 2 :(得分:1)

根据您确切的休眠需求,可以完全删除antlr依赖项。通过将其添加到您的hibernate属性,您可以毫无问题地运行:

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

答案 3 :(得分:0)

您还可以将weblogic.xml文件修改为prefer-application-packages。查看this forum post了解详细信息。

答案 4 :(得分:0)

The package name 'rescuetrailer' is already been used by another package: {PackageConfig Name:rescuetrailer namespace: abstract:false parents:[{PackageConfig Name:webwork-default namespace: abstract:false parents:[]}]}
Could not execute action
org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken [from pinacle.person.model.Person p where p.jobNo='meiql']
    at org.hibernate.hql.ast.HqlLexer.panic(HqlLexer.java:57)
    at antlr.CharScanner.setTokenObjectClass(CharScanner.java:340)
    at org.hibernate.hql.ast.HqlLexer.setTokenObjectClass(HqlLexer.java:31)
    at antlr.CharScanner.<init>(CharScanner.java:51)
    at antlr.CharScanner.<init>(CharScanner.java:60)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:56)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:53)
    at org.hibernate.hql.antlr.HqlBaseLexer.<init>(HqlBaseLexer.java:50)
    at org.hibernate.hql.ast.HqlLexer.<init>(HqlLexer.java:26)
    at org.hibernate.hql.ast.HqlParser.getInstance(HqlParser.java:44)

weblogic 10.3.6 杰克1.6 centos7.6

做到这一点

cat $DOMAIN_HOME/bin/setDomainEnv.sh | grep PRE_CLASSPATH

export PRE_CLASSPATH=/YOUDIR/antlr-2.7.6.jar