当我使用SetFirstResult和SetMaxResult,如果查询已加入结果有重复的结果,而不是唯一的。您是否知道在使用SetFirstResult和SetMaxResults时无需使用ResultTransformer就可以获得不同的结果集?
然后我使用标准api的所有类型的Distinct助手。但它不过滤整个结果集,只是过滤分页的结果。
我该如何解决这个问题?
感谢
当我使用SetFirstResult和SetMaxResult,如果查询已加入结果有重复的结果,而不是唯一的。您是否知道在使用SetFirstResult和SetMaxResults时无需使用ResultTransformer就可以获得不同的结果集?
然后我使用标准api的所有类型的Distinct助手。但它不过滤整个结果集,只是过滤分页的结果。
我该如何解决这个问题?
感谢
我已经找到了hacky thing to overcome这个问题。
唯一的“解决办法”这是 我已经能够拿出是 问题从标准 相同的标准对象两个查询。第一个 得到id的第二个是 约束到id。
//根据需要设置crtieria, 包括分页myCriteria = doStuffToSetupCriteria(); myCriteria.setFirstResult((page-1)* itemsPerPage); myCriteria.setMaxResults(itemsPerPage);
//获取列表中,如果主键 myCriteria.setProjection(Projections.distinct(Projections.property( “myAllias.id”)); 列表ID = gacc.list();
//现在添加ID的进入 限制 myCriteria.add(Restrictions.in(“myAlias.id, IDS));
//从最后一个条件而定运行 gacc.setProjection(空)清理; 海关总署。 setFirstResult(0); gacc.setMaxResults(Integer.MAX_VALUE);
//结果列表对象= gacc.list()
小哈克我同意,但唯一 接受soltion我能找到给 这个limitiation。
我建立了一个类似的解决方案,但在短短的一次旅行DB:
的DetachedCriteria的子查询= ... // - >添加你想要的所有规范和包容性的 “SetFirstResult” 和 “SetMaxResults”
DetachedCriteria rootQuery = DetachedCriteria.For(); //其中T是一个实体
subQuery.SetProjection( Projections.Distinct( Projections.ProjectionList()。添加(Projections.Alias(Projections.Property( “ID”), “ID”)) ) );
//注意:我的所有实体都继承自包含属性“ID”的基类 rootQuery.Add(Subqueries。PropertyIn(“ID”,subQuery));
// ...然后使用rootQuery获取T的List,并且不会重复检索项目。
我希望有人发现这个实现有帮助:)
罗曼客户
使用ResultTransformer搜索结果进行过滤,但Projections.Distinct应当就查询了“独特”的关键字。这不正常吗? – 2009-02-13 15:37:02
“在客户端”是否意味着,它从数据库获取所有内容并将其过滤到内存中而不是在SQL Server上? – 2009-02-13 17:13:05