我有一个非常复杂的查询,它应用不同的过滤层,需要排序/分页。
在伪sql中我想要以下内容:
<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
我使用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
...但是,DetachedCriteria没有idFilterSubQuery
和setFirstResult()
...但你不能将普通setMaxResult()
添加为SubQuery(我至少找不到方法)...
我想要一个解决方案,不首先获取所有id,然后是完整的对象(减少到DB的往返)
任何想法如何实现这一目标?因此要么使用Criteria作为SubQuery,要么将分页添加到DetachedCriteria ...
我正在使用Hibernate 4.2.21