zy_pub
2009-03-25 16:35
浏览 506
已采纳

DetachedCriteria查询去掉重复项的问题。。。。紧急。!

这个方法做查询,去掉cst_lost表 所有的重复项
[code="java"]
public Page findAllLost(int pageCount, int pageSize) {
DetachedCriteria criteria = DetachedCriteria.forClass(CstLost.class);
criteria.setProjection(Projections.distinct(Projections.projectionList()
.add(Projections.property("lstId"), "lstId")
.add(Projections.property("lstCustName"), "lstCustName")
.add(Projections.property("lstCustManagerName"), "lstCustManagerName")
.add(Projections.property("lstLastOrderDate"),"lstLastOrderDate")
.add(Projections.property("lstStatus"), "lstStatus")));
List allList = cstLostDAO.findByCriteria(criteria);
System.out.println("得到的长度"+allList.size());
Page page = new Page();
List list = new ArrayList();
for(Object[] obj:allList){
CstLost cstLost = new CstLost();
System.out.println("得到的ID"+obj[0]);
String lstId=obj[0].toString();
cstLost.setLstId(Long.parseLong(lstId));
cstLost.setLstCustName((String)obj[1]);
cstLost.setLstCustManagerName((String)obj[2]);
cstLost.setLstLastOrderDate((Date)obj[3]);
cstLost.setLstStatus((String)obj[4]);
list.add(cstLost);
}
page.setList(list);
return page;
[/code]
cst_lost表有主键ID,自动增长列。。。我在执行查询的时候 必须要查ID。。。 但是如果查ID的话,就去不掉重复项了, 怎么办呢?

[b]问题补充:[/b]
就是需要用到分页。。 才麻烦的。。 。
[b]问题补充:[/b]
今天在SQLserver2000的查询分析器里试了很多次

把ID这一列去掉,就能实现去掉重复项

但是,ID是不能去掉的

我在页面上要用到这个ID......

周一就答辩了。。。!!

着急啊。。。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • zhoujuan520 2009-03-25 16:40
    已采纳

    我也碰到过你的问题,
    开始的时候我是换成 原生SQL才解决的.
    后来我发现可以通过优化查询条件.使用了别名等.终于可以用DetachedCriteria查出自己想要的数据,没有重复

    其实重复可能是你的条件没有设定真确.因为他是根据你的条件来查询的

    已采纳该答案
    打赏 评论
  • zhoujuan520 2009-03-25 16:53

    如果你的结果不需要用来分页的话
    你也可以在后天遍历下list集合
    手动判断他们,把重复的remove

    打赏 评论
  • playfish05 2009-03-25 17:14

    试试DISTINCT?

    criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);看看?

    打赏 评论
  • playfish05 2009-03-25 22:05

    呃..可能DISTINCT不行,因为DISTINCT对比的是对象,目前好像并不支持对对象的属性来DISTINCT的操作...

    或许你试试将cstLost实现一下equals()方法,然后再看看能否实现对比操作?

    equals()方法你可以要求2个对象的所有属性都要相等,那才是相同的对象.

    如果实在没办法...那就将结果取出来放到Set里面..让Set自动过滤掉重复的部分..

    打赏 评论

相关推荐 更多相似问题