一尘不染

如何在具有联接和基于行的限制(分页)的休眠状态下获得不同的结果?

hibernate

我正在尝试在具有联接到其他表的Hibernate
Criteria查询上使用基于行的限制(例如:setFirstResult(5)setMaxResults(10))来实现分页。

可以理解,数据是随机切断的。而其中的原因进行了说明这里

作为解决方案,该页面建议使用“第二个SQL选择”而不是联接。

如何将现有的条件查询(使用createAlias()进行联接)转换为嵌套选择呢?


阅读 216

收藏
2020-06-20

共1个答案

一尘不染

您可以通过请求一个不同的ID列表而不是一个不同的水合对象列表来获得所需的结果。

只需将其添加到您的条件中:

criteria.setProjection(Projections.distinct(Projections.property("id")));

现在,根据基于行的限制,您将获得正确的结果数。之所以可行,是因为投影将 作为 sql查询的 一部分
执行差异检查,而不是ResultTransformer所做的是 执行sql查询 之后 过滤结果的差异性。

值得注意的是,您现在将获得一个ID列表,而不是获取对象列表,您可以使用它们在以后hibernate时混合对象。

2020-06-20