你知道反正得到一个不同的结果,而无需使用SetFirstResult和SetMaxResults时,使用使用ResultTransformer设置?

StackOverflow https://stackoverflow.com/questions/545940

当我使用SetFirstResult和SetMaxResult并且如果查询具有加入结果有重复的结果,而不是唯一的。

然后,我使用的标准API的所有类型鲜明帮手。但它不过滤整个结果集,它只是过滤分页的结果。

我怎样才能解决这个问题?

由于

有帮助吗?

解决方案

我已经找到了哈克事情克服这个问题。

  

唯一的“解决方法”为此该   我已经能够拿出是   从发布的标准两个查询   相同条件对象。第一个   得到的ID第二个是   contrained到IDS。

     

//设置crtieria如你所愿,   包括分页myCriteria =   doStuffToSetupCriteria();   myCriteria.setFirstResult((页面-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(NULL);   gacc.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”,子查询));

// ...然后使用rootQuery得到T的列表和没有重复的项目将被检索。

我希望有人发现这个实现有帮助:)

罗曼

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top