Criteria criteria = baseDao.createCriteria(TbEbillDataDetail.class);
criteria.setProjection(Projections.distinct(Projections.property("cardNo")));
这样虽然是去掉cardNo的重复记录了 但是只能得到cardNo字段的记录,而且hibernate还会自动给这个字段加一个别名
 
这是控制台打印出的语句:select distinct this_.V_CARDNO as y0_ from table_test this_
所以在JSP页面如果按cardNo来显示 根本就显示不出来。
我想要的就是通过criteria 设置去掉一个字段的重复值 同时查询出该表中的所有信息(条件是在cardNo不重复的情况下)求高人教教该怎么写

解决方案 »

  1.   

    你要用HQL去实现  SQL语句的 分组统计的功能?
    非要用criteria吗   criteria是什么我还真不知道   但是使用HQL我可以分组统计  
      

  2.   

    HQL语句:
    String hql = "select p.name,p,publishDate,count(id) from Popularize p group by p.name,p.publishDate order by id desc";
    Query query = getSession().createQuery(hql);
    以下为取值部分:
    List list = query.list();//注意不要用泛型
    for(int i = 0;i<list.size();i++){
        Object[] obj = (Object[])list.get(i);//如果你将统计数字 和 数据一起select  那么这里就是一个Object数组
        System.out.println(obj[0]);
        System.out.println(obj[1]);
        System.out.println(obj[2]);
        System.out.println(obj[3]);
        System.out.println(obj[4]);
        ......
        无限打印下去,知道系统报数据越界异常,那么好了  找你需要的信息,按照序号取,没有的信息对应序号不取就完事了。
    }
    方法很笨   但是的确可用。如果有人会常规方式,请发出来  大家参考
      

  3.   

    Criteria 你不知道是什么????????????????????????
      

  4.   

    如果是HQL我也会.就是必须要用Criteria 
      

  5.   


    如果现在有一个非常复杂的绘制报表需求,是你用Criteria 非常不容易实现的(你也会用hql或者sql了。)
      

  6.   

    如果不知道如何用Criteria 来解决此问题 请不要在回复了。
      

  7.   

    该问题已经解决.假设你希望查询一张表的所有数据 而不希望某一个字段重复的数据出现 那么可以这样
    criteria.add(Restrictions.sqlRestriction("rowid in (select  min(a.rowid)  from 你的表名 a group by a.重复的字段)"));
    Restrictions.sqlRestriction代表 where后面跟的语句,rowid是每张表必有的.所以通过子查询可以将条件过滤掉,只剩下a.重复的字段不重复的所有数据.碰到同样问题的朋友可以参考次方法解决.
      

  8.   

    可以用
    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
      

  9.   

    比如,select * from A a group a.name,a.age;
    想要得到对象形式的返回,
    不妨试试
    sqlRestriction("1=1 group by name,age");其他查询条件还可以放,+上  1=1  主要用于没有其他条件的情况下,直接group by name,age汇报语法错误
    产生的语句会是 where group by name,age