我希望在多个表加入条件后进行分页。
问题是:
我加入表时生成的重复记录。 应用于记录集的分页(带重复)。
我使用 criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 删除重复的记录。
例如: 通常我在应用删除重复后得到10条记录。 当我将起始索引设置为1并将结束索引设置为5时,我应该得到5条记录,但它返回2或3(大约)。这取决于加入。
请帮帮我。
答案 0 :(得分:1)
这里的问题在于应用了两种不同的技术。
因此,如果实际上有2行加倍加1,则转换将产生3个对象。
正确的(也许是最好的)方式,如何避免这种情况,是不使用集合的提取。如果我们需要显示集合,我们应该懒惰地加载它(例如使用批量大小来减少选择的数量)
如果我们需要将集合用作过滤器,我们应该将其转换为subquery
,并再次对根实体进行分页,并使用IN(子查询)子句
想象一下,父表:
ParentId, Code
1 , 'P1'
2 , 'P2'
3 , 'P3'
子表:
ChildId , Code , ParentId
1 , 'C1' , 1
2 , 'C2' , 1
3 , 'C3' , 2
4 , 'C4' , 2
5 , 'C5' , 3
如果我们要求Parent
并加入Child
集合,我们会
答案 1 :(得分:0)
我在这里回答:Pagination with Hibernate Criteria and DISTINCT_ROOT_ENTITY
你需要做3件事,1)得到总数,2)得到你想要的行的ID,然后3)得到你在步骤2中找到的id的数据。真的不是那么糟糕一旦你得到正确的订单,你甚至可以创建一个通用的方法,并发送一个分离的标准对象,使其更抽象。