java hibernate reflection nosuchmethoderror

Necesito ayuda con este error: java.lang.NoSuchMethodError



hibernate reflection (9)

Tengo este código de Java (JPA):

String queryString = "SELECT b , sum(v.votedPoints) as votedPoint " + " FROM Bookmarks b " + " LEFT OUTER JOIN Votes v " + " on (v.organizationId = b.organizationId) " + "WHERE b.userId = 101 " + "GROUP BY b.organizationId " + "ORDER BY votedPoint ascending "; EntityManager em = getEntityManager(); Query query = em.createQuery(queryString); query.setFirstResult(start); query.setMaxResults(numRecords); List results = query.getResultList();

No sé qué está mal con mi consulta porque me da este error:

java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V at org.hibernate.hql.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1802) at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1420) at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130) at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702) at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296) at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:271) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) 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:1650)

Gracias.


Apuñalar en la oscuridad - ¿Estás seguro de que tienes un conjunto constante de frascos? Tal vez necesites obtener el frasco antlr que viene con la distribución de hibernación que estás usando ...


Er, ¿no es su consulta tratando de seleccionar b, que es un alias de tabla y eso no está permitido por lo que sé.


He encontrado el problema: debido a que esta es una consulta nativa, las clases de Java para estas 2 tablas deben tener algunos atributos especiales:
en la clase Bookmarks.java

@OneToMany(mappedBy = "bookmarkId") private Collection votesCollection; y en la clase Votos.java

@JoinColumn(name = "bookmark_id", referencedColumnName = "bookmark_id") @ManyToOne [private Bookmarks bookmarkId;

y también he cambiado la consulta para trabajar

tring queryString = "SELECT b, sum(v.votedPoints) " + "FROM Bookmarks b " + "LEFT OUTER JOIN b.votesCollection v " + "WHERE b.userId = 101 " + "GROUP BY b.organizationId " + "ORDER BY sum(v.votedPoints) asc ";

gracias por la ayuda


La consulta parece no válida a menos que sea un artefacto de formateo.

Creo que querías decir esto:

Select b, ...

ser:

Select b.organizationId, ...

??


Probablemente supongo que algo va mal con su consulta, porque el método HqlBaseParser no se puede buscar se llama recover(RecognitionException, Bitset) . Quizás esta consulta falla por alguna razón, las otras consultas más simples no lo hacen (y la excepción NoSuchMethod se lanza al intentar recuperarse de ese error).

java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V


Puede ser que tenga algunas comillas dobles " faltantes " o que deberían duplicarse en su HQL.

Ilustración aquí .

O te pierdes algunas citas simples como se ilustra allí


Tengo el conjunto constante de jar porque las consultas simples como esta

"SELECT b FROM table_name b WHERE b.userId = 102 "

estan trabajando. He verificado todas las comillas dobles y todo está bien.

Mi base de datos es: mysql, y uso jpa para conectarme a ella. No sé qué está causando el problema. Tal vez este tipo de unión, no sé


Tu consulta sigue siendo incorrecta. Tal vez funciona con su controlador / db, pero no es SQL estándar. Debería seleccionar b.* O b.organizationId .


Definitivamente tiene un problema con la versión de hibernate y tarros ANTLR que está usando. El método de recuperación no estaba presente en la clase ANTLR Parser hasta la versión 2.7.6? Si está utilizando una versión anterior de ANTLR, como 2.7.2, verá este problema.

Usar maven puede causar este tipo de situación, donde dependes de Hibernate y sus dependencias transitivas, pero algo ''más cercano''; por ejemplo, Struts; proveedores una versión anterior diferente de ANTLR y esa versión anterior se resuelve en su aplicación.

Si puede proporcionar la versión de los jars involucrados, podremos ayudar un poco más. Una vez que haya solucionado el problema con las versiones jar, debería obtener un mensaje de error más revelador que muestra qué está mal con su expresión HQL.