Grails: использование «count ()» вместо экземпляра - PullRequest
1 голос
/ 14 августа 2011

У меня есть отношение 1 ко многим, где каждая группа имеет несколько позиций, т.е.

Group -1----N- Position

Группа классов {static hasMany = [postions: Position}

Если у меня есть конкретный экземпляр группы, я не могу подсчитать напрямую, сколько у него позиций? То есть вызовите какой-нибудь метод group.positions.??

Спасибо

1 Ответ

8 голосов
/ 14 августа 2011

Как сказал OverZealous, вы можете позвонить на group.positions.size(), но это будет очень дорого для большого количества Position с, так как он загрузит их все в память, чтобы просто посчитать их, а затем выбросить.

Если у вашего Position класса есть обратная ссылка на принадлежащий ему класс Group, например, static belongsTo = [group: Group], тогда вы можете использовать этот легкий запрос:

def group = ...
int positionCount = Position.countByGroup(group)

Если у вас нет двунаправленных отношений, вы можете получить счет через HQL:

def group = ...
int positionCount = Group.executeQuery(
    'select count(pos) from Group g ' +
    'inner join g.positions pos where g=:g', [g: group])[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...