Grails - Как вернуть коллекцию из отношений belogsTo с фильтром - PullRequest
0 голосов
/ 04 октября 2011

У меня есть класс 'User' и 'UserOrder' в граалях. В классе userOrder определено отношение «ownTo», а в классе «User» - отношение hasMany, например:

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 не работает. Я просто хочу, чтобы он возвратил первый (любой) UserOrder со статусом, установленным в '0', но когда я запускаю приведенный выше код, я получаю следующую ошибку:

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

Как мне получить метод, чтобы просто вернуть UserOrder, принадлежащий этому пользователю со статусом '0'?

1 Ответ

3 голосов
/ 04 октября 2011

Вы не можете выполнить эффективную фильтрацию по свойству коллекции - сначала будет получена вся коллекция.Плюс, findWhere() - статический метод.Для эффективного запроса к БД, просто используйте

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

Обратите внимание на изменение типа возвращаемого значения.Чтобы получить Set соответствующих заказов, используйте

UserOrder.findAllWhere(user: this, status: 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...