Grails findAll有排序,顺序,最大和偏移量? [英] Grails findAll with sort, order, max and offset?
本文介绍了Grails findAll有排序,顺序,最大和偏移量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在findAll查询中整合排序,顺序,最大值和偏移量。以下工作正常:
def books = Book.findAll(from Book as b where b.approved = true order by b .dateCreated desc,[max:max,offset:offset])
但是我想要的是:
$ b
def books = Book.findAll(from Book as b where b.approved = true,[sort:'dateCreated' ,order:'desc',max:max,offset:offset])
这是行不通的。如何重写这个?
解决方案
HQL不支持排序和顺序作为参数,所以您需要包含order by作为HQL表达式的一部分
def books = Book.findAll(from Book as b where b.approved = true
+order by b.dateCreated desc,[max:max,offset:offset])
(或者在这种情况下,只需使用 Book.findAllByApproved(true,[...])
而不是HQL)。 b
所以如果排序和顺序是变量,你需要一个技巧,比如
def books = Book。
+(params.sort?order by b。$ {params.sort} $ {params.order}:''),$ b $(Book from b where b.approved = b [max:max,offset:offset])
I want to integrate sort, order, max and offset in a findAll query. The following works fine:
def books = Book.findAll("from Book as b where b.approved=true order by b.dateCreated desc", [max: max, offset: offset])
But what I want is:
def books = Book.findAll("from Book as b where b.approved=true", [sort: 'dateCreated', order: 'desc', max: max, offset: offset])
This does not work. How do I have to rewrite this?
解决方案
HQL doesn't support sort and order as parameters, so you need to include the "order by" as part of the HQL expression
def books = Book.findAll("from Book as b where b.approved=true"
+ " order by b.dateCreated desc", [max: max, offset: offset])
(or in this case just use Book.findAllByApproved(true, [...])
instead of HQL).
So if the sort and order are variables you need a trick like
def books = Book.findAll("from Book as b where b.approved=true"
+ (params.sort ? " order by b.${params.sort} ${params.order}" : ''),
[max: max, offset: offset])
这篇关于Grails findAll有排序,顺序,最大和偏移量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文