我有一个非常复杂的查询,它应用不同的过滤层,需要排序/分页 .

在伪sql中我想要以下内容:

SELECT ... FROM a WHERE a.id in (SELECT a.id FROM a WHERE [...] limit 10,10)

我使用 CriteriaDetachedCriteria ,类似这样:

Criteria criteria = session.createCriteria(xx.class, "xx");
DetachedCriteria idFilterSubQuery = DetachedCriteria.forClass(xx.class, "xx");
//ADD ALL FILTERS TO idFilterSubQuery
//ADD ALL OUTER_JOINS TO criteria and idFilterSubQuery
criteria.add(Subqueries.propertyIn("id", idFilterSubQuery));

现在为了分页,我无法将其添加到 criteria ,因为外连接搞砸了......所以我需要将它添加到 idFilterSubQuery ...但是,DetachedCriteria没有 setFirstResult()setMaxResult() ...但是你无法添加正常 Criteria 作为SubQuery(我至少没有找到方法)...

我想要一个不首先获取所有id的解决方案,以及之后的完整对象(减少到DB的往返)

任何想法如何实现这一目标?所以要么使用Criteria作为SubQuery,要么将分页添加到DetachedCriteria ......

我正在使用Hibernate 4.2.21