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......

周一就答辩了。。。!!

着急啊。。。

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

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

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

试试DISTINCT?

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

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

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

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

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