2011-08-25 8 views
2

ダイナミックファインダを使用して、statusOpenOn(date)の2つのフィールドで検索しようとしています。このクエリではうまく機能し、罰金されていますgrailsでダイナミックファインダを使用して値を検索する

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) 

この問題を解決するために私を導いてください。

答えて

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

現時点では、最大値がの動的なファインダを2つ使用することができます。これは2つの基準です。さらに多くを使用する必要がある場合は、CriteriaまたはHQLのいずれかを使用することを検討する必要があります。

このanswerはあなたの質問についてさらに詳しく説明しています。

0

私はちょうどsession.user.userId(私はuがここに文字列のことはuserIdを必要とし `tを仮定)createCriteria uはおそらく:)

1

を必要とするものであるか「」二番目のパラメータを置く必要がないと思うのほかにところで、私のために、より読みやすいようで、このような何か、:

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

返事に感謝 – manu

関連する問題