错误信息:
Exception in thread "main"java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
atorg.hibernate.hql.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:915)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4764)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1373)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4243)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3725)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
atorg.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
atorg.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
atorg.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
atorg.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
atorg.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
atorg.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
atorg.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
atorg.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
atorg.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
atorg.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
atcom.zjut.daoImpl.AttachDaoImpl.getAttachById(AttachDaoImpl.java:52)
attest.testConnect.main(testConnect.java:21)
错误原因:
当在几种框架集成的时候,在调用HibernateDaoSupport中的某个方法时会出现: java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 的错误。
这是因为在struts2自带的antlr-2.7.2.jar包的版本较低,需要换成antlr-2.7.6.jar。
而事实上,在项目中已经存在了antlr-2.7.6.jar这个包。所以只需要删除antlr-2.7.2.jar包就可以解决该问题。
若是MyEclipse自动导入框架所需要的包,antlr-2.7.2 在 Hibernate3.3 Core Libraries 目录下,antlr-2.7.6在 Struts 2 Core Libraries目录下。
选择windows---preferences---在文本框中搜索struts 2(中间有空格)---选择struts 2---选择antlr-2.7.2.jar---Remove---OK。