我有一个非常复杂的查询,它应用不同的过滤层,需要排序/分页 .
在伪sql中我想要以下内容:
SELECT ... FROM a WHERE a.id in (SELECT a.id FROM a WHERE [...] limit 10,10)
我使用 Criteria
和 DetachedCriteria
,类似这样:
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