1

当我尝试在我的代码中执行 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
4

6 回答 6

3

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

<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
于 2014-02-06T13:34:20.067 回答
2

我在 weblogic 10.3 中遇到了这个问题,在应用程序类路径中有 antlr-2.7.7.jar,并且能够通过在文件 weblogic-application.xml 中添加“antlr.*”的首选应用程序包来解决它。

于 2015-01-10T04:38:49.087 回答
1

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

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

  1. Weblogic 12c:对于兼容 Java EE 6 的 Weblogic 版本,我们只需要添加 antlr jar 依赖项。
  2. 下载并将以下文件放在<WL_HOME>/common/lib/antlr-2.7.7.jar
  3. 在类路径中添加上述文件

对于 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.cmdPRE_CLASSPATH=%WL_HOME%/common/lib/antlr-2.7.7.jar中添加了设置代码 并重新启动了weblogic。这对我来说很好。

于 2013-07-23T21:03:21.143 回答
0

您还可以将 weblogic.xml 文件修改为 prefer-application-packages。查看此论坛帖子了解详细信息。

于 2014-09-22T19:18:30.247 回答
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 jdk 1.6 centos7.6

就这样做

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

export PRE_CLASSPATH=/YOUDIR/antlr-2.7.6.jar
于 2019-07-22T11:04:19.343 回答
0

将 antlr.2.7.6.jar 复制到 Web Logic Lib 目录并将 PRE_CLASSPATH 设置为此 jar 文件对我有用。weblogic 服务器比您正在处理的自定义应用程序启动得更早。所以在公共环境中设置它的 pre_classpath 将加载类,你不会得到 ClassNotFoundException 异常。注意我使用的是 Windows。

@the weblogic lib directory is loacated in <WL_HOME>\common\lib\

@Modify commEnv.cmd or commEnv.sh located in <WL_HOME>\common\bin\ as follows
@after WL_HOME (Web Logic Server Home Directory) has been set ...
@rem Set WebLogic Home
set WL_HOME=E:\Oracle\Middleware\wlserver_10.3

@set the pre_classpath
set PRE_CLASSPATH=%WL_HOME%\lib\antlr.jar
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
于 2021-11-17T13:03:29.497 回答