HQL返回java.lang.NoSuchMethodError

时间:2013-09-24 11:38:48

标签: java hibernate hql

我试图以这种方式在HQL中设置参数:

 Query query = session.createQuery("from Device d " +
                    "left join fetch d.tradeInOldDevice " +
                    "left join fetch d.tradeInNewDevice " +
                    "left join fetch d.warranty "  +
                    "where d.owningCompany.customerRefId =:customerId ");


              query.setString("customerId", "someHardCodeCustomerId");


            Set<Device> customerDevices= (Set<Device>) query.list();

我觉得这个错误:

ספט24,2013

2:36:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [ServicesServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
    at org.hibernate.hql.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:945)

Hibernate依赖:

 <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.0.1.Final</version>
        </dependency>


<!-- Hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>3.6.10.Final</version>
        </dependency>

我在Spring容器内的tomcat上运行hibernate。

我在My项目中检查了maven依赖项我有Maven:antlr:antlr:2.7.2。

这里可能有什么问题?

感谢。

3 个答案:

答案 0 :(得分:1)

图书馆冲突。我想你在web-inf / lib中加载了另一个版本的antlrXXX.jar。这是在休眠依赖的那个之前加载的。 请用已使用的hibernate版本完成问题,以便我可以回复为completness添加正确的依赖项。

更新: 评论之后,冲突的版本是2.7.2。 使用mvn dependency:tree检查谁正在导入2.7.2并在pom中排除该传递依赖。

答案 1 :(得分:0)

这是因为antlr-2.7.2.jar struts2和Hibernate的antlr-2.7.7.jar冲突,只要antlr-2.7.2.jar struts2文件可以删除这个问题就不会发生。你可以试试。

如果报告了这样的错误:然后你去这个WEB WEB-INF下你的tomcat应用程序在lib下antlr-2.7.2.jar将被删除。

答案 2 :(得分:0)

我最近收到错误java.lang.NoSuchMethodError:antlr.collections.AST.getLine()

当antlr jar文件与struts 1.3和hibernate 3发生冲突时会出现此错误。您需要通过单击myeclipse Windows &gt;&gt从struts 1.3中删除antlr 2.7.2 jar文件; 偏好设置&gt;&gt; MyEclipse &gt;&gt; 项目库&gt;&gt;的 Struts2的

取消选中antlr 2.7.2。

希望有所帮助......