Java 参数为NoSuchMethodError的HQL

Java 参数为NoSuchMethodError的HQL,java,hibernate,hql,Java,Hibernate,Hql,我肯定我忽略了一些显而易见的事情 下面的静态查询工作正常 hqlQuery = "select user from User as user where user.id = 'userid' "; 但是当我参数化查询时 hqlQuery = "select user from User as user where user.id = :me "; Query query = session.createQuery(hqlQuery); 我从构建查询中得到了一个糟糕的堆栈转储。 我忽略了什么

我肯定我忽略了一些显而易见的事情

下面的静态查询工作正常

hqlQuery = "select user from User as user where user.id = 'userid' ";
但是当我参数化查询时

hqlQuery = "select user from User as user where user.id = :me ";
Query query = session.createQuery(hqlQuery);
我从构建查询中得到了一个糟糕的堆栈转储。 我忽略了什么

Exception in thread "main" java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
at org.hibernate.hql.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:940)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4997)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1413)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3947)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
线程“main”java.lang.NoSuchMethodError中出现异常:antlr.collections.AST.getLine()I 位于org.hibernate.hql.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:940) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4997) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1413) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonextpr(HqlSqlBaseWalker.java:3947) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.where子句(HqlSqlBaseWalker.java:831) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 位于org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244) 位于org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) 位于org.hibernate.hql.ast.QueryTranslatorImpl.docomfile(QueryTranslatorImpl.java:185) 位于org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101) 在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80) 位于org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124) 位于org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 位于org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 位于org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
看起来您混合了Hibernate jar的不兼容版本(可能是ANTLR jar的版本错误)。

问题在于您的项目中的两个ANT jar文件(即:Hibernate jar库中的ANTLR-2.7.6.jar和struts-1.3中的ANTLR-2.7.2)之间存在冲突。这似乎是Struts-1.3和Hibernate应用程序的一个特殊问题

请从项目(/WEB-INF/lib文件夹)中删除antlr-2.7.2.jar&它应该可以正常工作。。让我知道它是否有效。

您可以:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts-core</artifactId>
    <version>1.3.10</version>

    <exclusions>
        <exclusion>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
        </exclusion>
    </exclusions>
</dependency>

org.apache.struts
支柱核心
1.3.10
antlr
antlr

尝试在pom.xml中添加此依赖项:

    <dependency>
        <groupId>antlr</groupId>
        <artifactId>antlr</artifactId>
        <version>2.7.7</version>
    </dependency>

antlr
antlr
2.7.7

项目改变了方向,这个问题现在(对我来说)没有意义了。我使用的是Struts1.2。坏jar的来源可能是weblogicserver9.xy。如果您能够解释发生了什么以及为什么会发生,那么您的答案将会有很大的改进。