0

我正在尝试以这种方式在 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();

我对这个错误感到困惑:

2013 年 2 月 24 日

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)

休眠依赖:

 <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 上运行休眠。

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

这里有什么问题?

谢谢。

4

2 回答 2

2

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

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

于 2013-09-24T11:42:08.823 回答
0

这是因为struts2 antlr-2.7.2.jar 和Hibernate antlr-2.7.7.jar 冲突,只要把antlr-2.7.2.jar 文件中的antlr-2.7.2.jar 或者struts2 去掉就不会出现这个问题。你可以试试。

如果报这样的错误: 那么你去你的tomcat应用下这个WEB WEB-INF 下的lib antlr-2.7.2.jar 会被删除。.

于 2013-09-24T11:45:37.750 回答