Как указать запрос в отношении hasMany в Grails?

У меня есть этот доменный класс в Grails:

class User {
   String name

   Status status
   enum Status {
    ACTIVE(1),
    BLOCKED(2)
   }

 static hasMany = [friends:User]
}

Таким образом, у пользователя может быть один или несколько друзей (User).

Когда я делаю что-то вроде этого:

User someone = User.get(1)
someone.friends // all friends from this user

Но я хочу заводить друзей только со статусом АКТИВНЫЙ. Как я могу указать это в классе домена?

Спасибо


person Camilo Costa    schedule 30.03.2013    source источник


Ответы (1)


Переопределите метод getFriends(). Это не проверяется, конечно.

Set<User> getFriends() {

User.executeQuery("Select f from User u join u.friends as f where u = :user and  f.status = :status", [user: this, status: Status.ACTIVE])

}
person James Kleeh    schedule 30.03.2013
comment
Я бы не стал переопределять геттер для ассоциации, так как иногда вам может понадобиться доступ к неактивным друзьям. Добавление неактивного пользователя через addToFriends или настройка всей коллекции через setFriends может создать некоторую путаницу при вызове getFriends(). Вместо этого определите getActiveFriends(). Я знаю, это то, о чем он просил, я просто добавляю свои 0,02$ - person Luis Muñiz; 01.04.2013