2011-01-29 38 views
5

我确信我俯瞰明显的东西HQL带参数的NoSuchMethodError

以下静态查询工作正常

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) 

回答

4

看起来像混合不兼容的Hibernate jar版本(可能ANTLR jar版本有错误)。

13

问题在于你的项目中两个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它应该很好地工作。让我知道,如果它的工作原理..

+0

该项目改变了方向,而现在的问题是实际意义(对我来说)。我正在使用struts 1.2。坏的jar源代码可能来自Weblogic Server 9.x – Aaron 2011-09-14 14:20:57

+0

是的,它为我工作! – CrakC 2016-09-29 11:26:04

2

你可以这样:

<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> 
1

尝试添加这种依赖在你的pom.xml:

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