Grails findAll有排序,顺序,最大和偏移量? [英] Grails findAll with sort, order, max and offset?

查看:485
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆