поиск значений с помощью динамических искателей в граалях - PullRequest
2 голосов
/ 25 августа 2011

Я пытаюсь выполнить поиск с использованием динамических искателей по двум полям: status и OpenOn(date). Этот запрос работает хорошо и нормально:

 render(view:'list', model:[incidentInstanceList:Incident.findAllByStatusIlikeAndOpenOnGreaterThan("closed",new Date()-1,[sort:"id",order:"desc"])])

Но сейчас я пытаюсь выполнить поиск с помощью динамических искателей по трем полям, то есть UserId, status и OpenOn(date):

 render(view:'list', model:[incidentInstanceList:Incident.findAllByStatusIlikeuserIdIlikeAndOpenOnGreaterThan("closed","${session.user.userId}",new Date()-1,[sort:"id",order:"desc"])])

Этот запрос не работает должным образом и показывает ошибку:

No signature of method: app.Incident.findAllByStatusIlikeuserIdIlikeAndOpenOnGreaterThan() is applicable for argument types: (java.lang.String, org.codehaus.groovy.runtime.GStringImpl, java.util.Date, java.util.LinkedHashMap) values: [closed, tt10004, Wed Aug 24 15:12:21 IST 2011, [sort:id, order:desc]] Possible solutions: findAllByStatusIlikeuserIdIlikeAndCreatedOnGreaterThan(java.util.List) 

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 4 ]

7 голосов
/ 30 ноября 2011
def incidentInstanceList = {

    def criteria = Incident.createCriteria()

    def results = criteria {
        and {
            user {
                like('userId', "${session.user.userId}").toString()
            }
            like('status',  "Closed" ) 
            gt('closedOn',new Date()-1)
            sort("id", "desc")
        }  

    } 

    render(view:'list', model:[ incidentInstanceList: results, incidentInstanceTotal: Incident.count()])        
}
4 голосов
/ 25 августа 2011

В настоящее время вы можете использовать только динамические искатели с максимальным двумя критериями. Если вам нужно использовать больше, вы должны рассмотреть возможность использования Критерии или HQL .

Этот ответ более подробно описывает ваш вопрос.

1 голос
/ 25 августа 2011

Возможно, что-то вроде этого, что, кстати, мне кажется более разборчивым:

def incidentInstanceList = 
    Incident.createCriteria().list
    {
        eq(status, 'closed')
        ilike(userId, "${session.user.userId}")
        gt(openOn, new Date()-1)
        sort("id", "desc")
    }
0 голосов
/ 25 августа 2011

Кроме того, я думаю, что нет необходимости указывать второй параметр "", просто сделайте session.user.userId (я предполагаю, что вам не нужно, чтобы userId был String здесь) createCriteria - это то, что вам нужно :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...