2011-10-04 50 views
0

我在grails中有一個'User'和'UserOrder'類。有對userOrder類和「用戶」類的hasMany關係定義的「屬於關聯」關係,就像這樣:Grails - 如何使用過濾器返回belogsTo關係的集合

class User { 

    String username 
    String password 

    static hasMany = [orders:UserOrder] 

    Set<UserOrder> getUserOrder() { 
     return orders.findWhere(status: 0) 
    } 
} 

class UserOrder { 
    User user 
    Integer status 

    static belongsTo = [User] 
} 

我的問題是,「getUserOrder」的方法是行不通的。我只是希望它設置爲「0」的狀態返回第一個(有)UserOrder,但是當我運行上面的代碼,我得到以下錯誤:

No signature of method: org.hibernate.collection.PersistentSet.findWhere() is applicable for argument types: (java.util.LinkedHashMap) values: [[status:0]] 

我如何獲得該方法只返回一個UserOrder,屬於這個用戶狀態爲'0'?

回答

3

您無法對集合屬性進行有效篩選 - 首先會獲取所有集合。另外,findWhere()是一種靜態方法。對於有效的數據庫查詢,只需使用

UserOrder getUserOrder() { 
    return UserOrder.findWhere(user: this, status: 0) 
} 

請注意返回類型的變化。要獲得匹配訂單的Set,請使用

UserOrder.findAllWhere(user: this, status: 0)