我有参数时的代码是:
public List searchByZj(int zj1, int zj2){
String hql = "from EstateInfo fw where fw.zj>=:zj1 and fw.zj<=:zj2";
Query query = getSession().createQuery(hql);
query.setInteger("zj1", zj1);
query.setInteger("zj2", zj2);
return query.list();
}
public void testQuery(){
                List list = searchByZj(45, 2400);
                for(int i=0;i<list.size();i++){
EstateInfo estateInfo = (EstateInfo)list.get(i);
System.out.println(estateInfo.getTitle());
}
closeSession();
}
public static void main(String[] args) {
new TestQuery().testQuery();
}
没有参数时的searchByZj()是:
public List searchByZj(int zj1, int zj2){
String hql = "from EstateInfo fw where fw.zj>=40 and fw.zj<=2400";
Query query = getSession().createQuery(hql);
//query.setInteger("zj1", zj1);
//query.setInteger("zj2", zj2);
return query.list();
}
没有参数的时候能正确查询,有参数时产生如下错误提示:
Exception in thread "main" java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
at org.hibernate.hql.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:915)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4764)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1373)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4243)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3845)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1789)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(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:1651)
at dal.TestQuery.searchByZj(TestQuery.java:42)
at dal.TestQuery.testQuery(TestQuery.java:26)
at dal.TestQuery.main(TestQuery.java:18)

解决方案 »

  1.   

    就是这一句:String hql = "from EstateInfo fw where fw.zj>=:zj1 and fw.zj<=:zj2";
    时有错误,如果直接把值写进去:String hql = "from EstateInfo fw where fw.zj>=40 and fw.zj<=2400";
    就没错误
      

  2.   

    java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I--
    奇怪,找不到对应get方法:zj1  这些你传参传的有问题吧
      

  3.   

    如果你用的是Hibernate3.0 你把jar包换成3.2 昨天我才遇到过
      

  4.   

    你不要写Main方法测试,不知道是不是这个问题
      

  5.   

    不写main方法怎么测试,在页面中试吗?
      

  6.   

    我在页面中用jsp输出还是不行。
      

  7.   

    项目里有这两个jar包产生了冲突所致:antlr-2.7.6.jar和anltr-2.7.2.jar。将anltr-2.7.2.jar包删除即可