2011-10-04 65 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)