【问题标题】:searching values by using dynamic finders in grails在 grails 中使用动态查找器搜索值
【发布时间】:2011-08-25 09:53:16
【问题描述】:

我正在尝试使用动态查找器通过 statusOpenOn(date) 两个字段进行搜索。这个查询运行良好:

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

但现在我尝试通过三个字段使用动态查找器进行搜索,即UserIdstatusOpenOn(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) 

请指导我解决这个问题。

【问题讨论】:

    标签: grails groovy


    【解决方案1】:
    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()])        
    }
    

    【讨论】:

      【解决方案2】:

      目前,您只能使用最多两个条件的动态查找器。如果您需要使用更多,您应该考虑使用CriteriaHQL

      answer 会更详细地说明您的问题。

      【讨论】:

        【解决方案3】:

        可能是这样的,顺便说一下,这对我来说似乎更清晰:

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

        【讨论】:

          【解决方案4】:

          除了我认为没有必要放第二个参数“”只做 session.user.userId (我假设你不需要 userId 在这里是字符串)createCriteria 是你需要的:)

          【讨论】:

            猜你喜欢
            • 2011-08-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多