2011-10-04 2 views
0

grails에 'User'및 'UserOrder'클래스가 있습니다. userOrder 클래스와 '사용자'클래스에 hasMany의 관계에 정의 된 'belongsTo를'관계는 이렇게 같이있다 :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]] 

가 어떻게 그냥을 할 수있는 방법을합니까를 이 사용자의 상태가 '0'인 UserOrder를 반환 하시겠습니까?

답변

3

컬렉션 속성에서 효과적인 필터링을 수행 할 수 없습니다. 모든 컬렉션이 먼저 가져옵니다. 또한 findWhere()은 정적 방법입니다. 효과적인 DB 쿼리를 위해서는

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

반환 유형 변경에 유의하십시오. 일치하는 주문의 Set을 얻으려면

UserOrder.findAllWhere(user: this, status: 0) 
을 사용하십시오.
관련 문제