在groovy中使用分页时我希望每页最多10个,但我希望在我达到500条记录后返回查询。
所以让我们说我的标准有10,000条记录匹配,我希望PagedResultList返回10而结果.totalCount = 500不是10,000。
我一直试图在条件中使用maxResults(500)来做这件事,但一直没有成功。在使用max?
时,你不能使用maxResults吗?答案 0 :(得分:0)
max
将返回带有对象的ArrayList。
maxResults
将返回PagedResultList
女巫,您可以使用totalCount
发出第二个查询来计算符合条件的对象。 totalCount是第二个查询 - 它实际上并不提取所有10k对象。
所以我不确定如何解决您描述的问题,因为如果查询在您的数据库中匹配10k,那将是您的总计数。您可以在支票中编码,如果totalcount是> 500,显示500.
但如果你担心GORM会拉回10k物体,那就不是了。有关详细信息,请参阅第一个示例http://docs.grails.org/3.2.10/ref/Domain%20Classes/createCriteria.html。
一个非常简单的控制器来显示行为:
def index() {
println "max:"
def q1 = Foo.createCriteria().list(max: 10) { }
println q1.class.name
println q1.totalCount
println "maxResults:"
def q2 = Foo.createCriteria().list {
maxResults(10)
}
println q2.class.name
// println q2.size() // totalCount doesn't exist on an ArrayList
}
输出:
max:
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_,
this_.name as name3_0_0_ from foo this_ limit ?
grails.orm.PagedResultList
Hibernate: select count(*) as y0_ from foo this_
2
maxResults:
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_,
this_.name as name3_0_0_ from foo this_ limit ?
java.util.ArrayList
您还可以看到生成的hql是相同的,并且为totalCount发送了第二个查询。
希望有所帮助。