我试图在具有联接到其他表的Hibernate Criteria查询上使用基于行的限制(例如setFirstResult(5)
和setMaxResults(10)
)来实现分页。
可以理解,数据是随机切断的。并解释here的原因。
作为解决方案,该页面建议使用“第二个SQL选择”而不是联接。
如何将现有条件查询(已使用createAlias()
进行联接)转换为使用嵌套选择呢?
最佳答案
您可以通过请求一个不同的ID列表而不是一个不同的水合对象列表来获得所需的结果。
只需将其添加到您的条件中:
criteria.setProjection(Projections.distinct(Projections.property("id")));
现在,根据基于行的限制,您将获得正确数量的结果。起作用的原因是因为投影将在sql查询的中执行区分性检查,而不是ResultTransformer所做的工作是在执行sqlt_rstrong之后过滤区分性的结果。
值得一提的是,您现在将获得一个ID列表,而不是获取对象列表,您可以使用它们在以后 hibernate 的情况下合并对象。