带参数NoSuchMethodError的HQL

Aar*_*ron 5 java hibernate hql

我确信我忽略了一些显而易见的事情

以下静态查询工作正常

hqlQuery = "select user from User as user where user.id = 'userid' ";
Run Code Online (Sandbox Code Playgroud)

但是当我参数化查询时

hqlQuery = "select user from User as user where user.id = :me ";
Query query = session.createQuery(hqlQuery);
Run Code Online (Sandbox Code Playgroud)

我通过构建查询得到了一个讨厌的堆栈转储.我在俯瞰什么?

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)
Run Code Online (Sandbox Code Playgroud)

小智 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并且它应该正常工作..让我知道它是否有效..


axt*_*avt 5

看起来你混合了不兼容的Hibernate jar版本(可能是ANTLR jar版本有错误).