开发者

searching values by using dynamic finders in grails

I am trying to search using dynamic finders by two fields which are status and OpenOn(date). This query is working well and fine:

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

But now I'm trying to search with dynamic finders by three fields, i.e. UserId,status and OpenOn(date):

 render(view:'list', model:[incidentInstanceList:Incident.findAllByStatusIlikeuserIdIlikeAndOpenOnGreaterThan("closed","${session.user.userId}",new Date()-1,[sort:"i开发者_运维百科d",order:"desc"])])

This query does not work properly and shows an error:

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) 

Please guide me to solve this problem.


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()])        
}


At the moment, you can only use dynamic finders with a maximum of two criteria. If you need to use more, you should consider using either Criteria or the HQL.

This answer goes into more detail on your question.


Probably something like this, which, by the way, seems more legible for me:

def incidentInstanceList = 
    Incident.createCriteria().list
    {
        eq(status, 'closed')
        ilike(userId, "${session.user.userId}")
        gt(openOn, new Date()-1)
        sort("id", "desc")
    }


Besides i think there is no need to put second parameter "" just do session.user.userId (i assume u don`t need userId to be String here) createCriteria is what u need :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜