Он работает:Как выполнить запрос из результата другого запроса
def c = DomainClass.createCriteria()
def results = c.list {
ge("property1", params.param1.toInteger())
le("property2", params.param2.toFloat())
}
Мы хотим добавить еще одно условие:
Попытка 1) До createCriteria:
def preResults = DomainClass.getAllByProperty3GreaterThan(0)
def c = preResults.createCriteria()
...
Дает ошибку: Нет подписи метода: java.util.ArrayList.createCriteria() применим для типов аргументов:() values: []
Покушение 2) После того, как createCriteria:
...
postResults = results.getAllByProperty3GreaterThan(0)
Это дает ошибку: Нет подписи метода: java.util.ArrayList.getAllByProperty3GreaterThan() применяется для типов аргументов: (java.lang .Integer): [0]
Причина, по которой не нужно включать все внутри createCriteria, заключается в том, что preResults (или postResults) являются результатом функции службы ... Я опустил Сервис здесь (и изменил имя v ariables) для упрощения.
Я не понимаю первую идею, @ zoran119. Не могли бы вы привести мне пример, пожалуйста? Вторая идея должна работать (если я могу передать именованный запрос из Контроллера в Службу), но это не выглядит для этой цели ...:/ – chelder
Вам не нужно передавать именованный запрос от контроллера к сервису. Вы просто объявляете именованный запрос в классе домена (в соответствии с документацией, которую я связал), и просто используем его в сервисе следующим образом: 'DomainClass.myNamedQuery.findAllByProperty3GreaterThan (0)'. – zoran119
Первая идея была бы такой: сначала сделайте 'def c = DomainClass.createCriteria()', затем 'def results = c.list {/ * stuff * /}', а затем, наконец, 'def filterResults = results. findAll {it.property3} '. Обратите внимание, что 'it.property3' вернет' true', если его значение больше нуля (просто сокращенный способ записи 'it.property3> 0') – zoran119