HQL с параметрами NoSuchMethodError - PullRequest
5 голосов
/ 29 января 2011

Я уверен, что пропускаю что-то очевидное

следующий статический запрос работает нормально

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 ]

13 голосов
/ 09 сентября 2011

Проблема здесь заключается в конфликте между двумя файлами jar ANT (а именно: 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) и он должен работать нормальноя знаю, если это работает ..

5 голосов
/ 29 января 2011

Похоже, вы смешали несовместимые версии Jibernate jar (возможно, ANTLR jar имеет неправильную версию).

2 голосов
/ 30 апреля 2013

Вы можете это:

<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 голос
/ 25 июля 2014

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

    <dependency>
        <groupId>antlr</groupId>
        <artifactId>antlr</artifactId>
        <version>2.7.7</version>
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...