代码如下:
public List find(final String[] conditions, final int start, final int recordsPerPage) throws DataAccessException {
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session){
StringBuffer sb=new StringBuffer("");
sb.append("select d from TWorkbudget d ");
sb.append("where d.iyear="+conditions[0]+" ");
sb.append("and d.imonth="+conditions[1]+" ");
sb.append("order by d.ctype ");
Query q=session.createQuery(sb.toString());
if (recordsPerPage != -1) {
q.setFirstResult(start);
q.setMaxResults(recordsPerPage);
}
System.out.println("分页----------------");
return q.list();
}
});
}查出来的结果少了啊,比数据库的少啊,谁帮忙看看,小弟在此谢谢了!

解决方案 »

  1.   

    检查一下生成的SQL。肯定同lz直接在数据库执行的不同。
    System.out.println(sb.toString());
    Query q=session.createQuery(sb.toString()); 
      

  2.   

    Query q=session.createQuery(sb.toString()); 
    这一句有问题,session接口的createQuery()方法的参数是以from开头的,如果要加上select * 的话就用createSQLQuery()方法。
    另外检查下你的start ,recordsPerPage 查询出来的是从start开始,总共recordsPerPage 条记录,不会将所有的记录查出来的,如果将所有的记录查出来再选择合适的显示,那就不叫分页了。
      

  3.   

    你可以看看生成的sql语句啊 自己执行一下  代码没问题  
      

  4.   

    大家好,我上班了,回来了,大家还在吗?
    之前关于上面的那个问题,我有了解决问题的方法了,但是不知道原理是什么。
    之前的问题症结是这样的:查出来的数据,和数据库中符合条件的数据不一致,也就是说用上面代码查出来的匹配记录比正常写sql语句查出来的记录少了一条,而且还多了一条重复的。
    我现在是这样解决的:
    sb.append("select d from TWorkbudget d ");
    sb.append("where d.iyear="+conditions[0]+" ");
    sb.append("and d.imonth="+conditions[1]+" ");
    sb.append("order by d.ctype ");
    Query q=session.createQuery(sb.toString()); 
    上段代码中,倒数第二句:sb.append("order by d.ctype ");把这句去掉,这样就会把符合where条件语句的全部记录取出来了,而且不会多一条重复的数据。