今晚再做一个SSH的项目时遇到了一个错误java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
而且错误还特别奇怪
开始是这样的查询代码,没有任何的问题
request.setAttribute(“countrylist”, countryService.getResult(“from Country”, null));
但是当继续编写,代码成了这样时
request.setAttribute(“provincelist”, provinceService.getResult(“from Province where country.id=?”,new Object[]{new Integer(1)}));
就会出现上面的错误,深感不解,所有的类的结构都是写的一模一样的.为何第一种代码不会报错,而第二种代码就会报错呢?先看看这两个查询语句唯一的差别就再与第一个是不带条件的查询,第二个是在执行时再出入查询条件.
好吧我把代码改成这样看看
request.setAttribute(“provincelist”, provinceService.getResult(“from Province where country.id=1″,null));
竟然没错了,课程成功查询数据了.真是倍感困惑,debug调试,看看是不是自己在传递参数parameters时出错
public List getResult(String hql, Object[] parameters) { Query query = sessionFactory.getCurrentSession().createQuery(hql); if(parameters != null && parameters.length > 0){ for (int i = 0; i < parameters.length; i++) { query.setParameter(i, parameters[i]); } } return query.list(); }
经过调试发现完全正确.能成功拼接出正确的查询语句.这就更让人恼火了.
最终还是搜索引擎帮了忙啊,最终确定问题是
Struts的antlr-2.7.2.jar与Hibernate3的antlr-2.7.6.jar存在jar包冲突问题,好吧删掉低版本的jar包.
最好将项目移除后再重新部署,我用了了”Redeploy/Reload application”
是失败了.
最让人不解的事情还没有结束,我就不信这个邪了.我非要再把那个低版本的jar导入试试.事实证明我真的见鬼了.再导入antlr-2.7.2.jar包后竟然没错误了.我不得不承认我的人品已经相当低了.不过为了保险起见,各位还是不要保留两个jar包了.说不定那天报个错就够你调试半天的.
事实再次证明预感是对了的。第二天又出现相同的错误了。看来myeclipse是有bug的,这次是坚决不能留了。删除了吧。
本文出自 纳百川,转载时请注明出处及相应链接。
本文永久链接: http://www.bicner.com/104.html