Порядок Grails FindAll из-за неработающего HQL

Когда я пишу этот hql:

tempDocs = Document.findAll("FROM Document where docName LIKE :docn ORDER BY status asc",[docn:string],[max:limit, offset:startIndex])

работает правильно. Но когда я пытаюсь обобщить это, написав

tempDocs = Document.findAll("FROM Document where docName LIKE :docn",[docn:string],[max:limit, offset:startIndex,sort:column,order:ordering])

Кажется, это не дает правильного порядка. Что здесь происходит не так?


person krs8785    schedule 30.10.2014    source источник
comment
Вы смогли попробовать мое предложение?   -  person th3morg    schedule 21.11.2014


Ответы (2)


Согласно документации для findAll, у вас есть только три параметры для queryParams: max, offset, cache. В качестве гибрида между двумя вашими примерами вы можете указать sort и order в качестве именованных параметров.

tempDocs = Document.findAll("FROM Document where docName LIKE :docn ORDER BY :sort :order",[docn:string],[max:limit, offset:startIndex,sort:column,order:ordering])
person th3morg    schedule 02.11.2014

для меня решение th3morg вызвало следующее исключение:

Класс org.hibernate.hql.internal.ast.QuerySyntaxException Неожиданный токен сообщения: : рядом со строкой 1, столбцом 89 [ОТ квитанцииbucketserver.Receipt, где project.customer.id = :customerId ORDER BY :sort :order]

мой синтаксис выглядел так (что может быть неправильно, я не эксперт) Receipt.findAll("FROM Receipt where project.customer.id = :customerId ORDER BY :sort :order",[customerId:customer.id],[ sort:column,order:ordering])

я смог заставить его работать с очень уродливым видом:

Receipt.findAll("from Receipt as r where r.project.customer.id = :companyId ORDER BY " +  field + " " + sortOrder   , [companyId: customer.id] )

вызвано:

def listReceipts = receiptHelperService.getReceiptsByCustomer(customerInstance, "vendor", "desc")
person Chris Legge    schedule 06.06.2015