2014-05-08 36 views
0

我有这样的查询支持分页,休眠等同于分页查询

select * 
from (select distinct field1 
from table 
where field2 = 'some_value' 
and filed3 > 'somevalue' 
and field4 in('somevalues') 
and field5 is null order by field1) 
where ROWNUM <= <page_size> ; 

我怎么能在同样代表hibernate.I不想出手构建query.Instead我想要的设置与上述查询匹配的hibernate中的条件。

回答

0
criteria.setMaxResults(pageSize); 
criteria.setFirstResult((pageNumber) * 10) 
+0

你所赐给将使查询的样子,选择不重复的字段1 从表 的建议,其中场2 =“SOME_VALUE” 和filed3>“ somevalue' 和field4 in('somevalues') 和field5为null按字段1排序,其中rownum <= page_size。我不想要这个查询。 – Karthik207

1

使用标准API的第一个结果和最大结果。链接here

Criteria queryCriteria = session.createCriteria(YourClass.class); 
queryCriteria .setProjection(Projections.distinct(Projections.property("id"))); 
queryCriteria.setFirstResult(10); 
queryCriteria.setMaxResults(20); 
queryCriteria.add(Restrictions.eq("propertyOne", 10)); //Add restrictions here 
List data = queryCriteria.list(); 

上面的查询会给你记录10-20

+0

这将如何工作?。将会先执行内部查询,然后限制page_size?所以内部查询将返回100行。外部查询将根据页面大小对其进行过滤。 – Karthik207

+0

将detachedCriteria工作? – Karthik207

+0

这里你不需要子查询。我将编辑答案以包含不同的结果。 Hibernate将生成正确的sql,以便限制行,在这种情况下不需要额外的子查询或子句。 – terpinmd