2011-01-29 2 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 банки (вероятно ANTLR баночки имеет неправильную версию).

13

Проблема заключается в конфликте между двумя файлами ANT jar (а именно: antlr-2.7.6.jar из библиотеки Hibernate Jar & antlr-2.7.2 из struts-1.3) в вашем проекте. Это, по-видимому, является своеобразной проблемой для Struts-1.3 & Hibernate.

Пожалуйста, удалите Antlr-2.7.2.jar из проекта (/ WEB-INF/Lib папки) & он должен работать нормально .. Дайте мне знать, если он работает ..

+0

проект изменил направление, и теперь спорный вопрос (для меня). Я использую struts 1.2. источником плохой банки может быть Weblogic Server 9.x – Aaron

+0

да, это сработало для меня! – CrakC

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> 
+2

Ваш ответ будет значительно улучшен, если вы сможете объяснить, что происходит и почему. – Ben

1

Попробуйте добавить эту зависимость в вашем pom.xml:

<dependency> 
     <groupId>antlr</groupId> 
     <artifactId>antlr</artifactId> 
     <version>2.7.7</version> 
    </dependency> 
Смежные вопросы