2011-08-25 3 views
2

동적 찾기를 사용하여 statusOpenOn(date)의 두 필드로 검색하려고합니다.grails에서 동적 찾기를 사용하여 값을 검색

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

을하지만 지금은 즉 세 개의 필드, UserId, statusOpenOn(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) 

이 문제를 해결하려면 안내하십시오.

답변

6
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

현재로서는 두 개의 동적 찾기를 사용할 수 있으며 두 개의 기준이 있습니다. 더 많이 사용해야하는 경우 Criteria 또는 HQL을 사용해야합니다.

answer은 질문에 대해 자세히 설명합니다. 내가 두 번째 매개 변수를 넣어 필요 ""단지 session.user.userId (내가 u는 문자열 여기에 사용자 ID가 필요 돈`t 가정) 음주 createCriteria은 u는 아마

0

그런데, 나를 위해 더 읽기 쉬운 것 같다, 이런 식으로 뭔가 : 답장을

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

:) 필요하다 없다 생각 외에

+0

감사 – manu

관련 문제