У меня есть много объектов темы и каждая Тема hasMany posts: Post Как я могу упорядочить все объекты темы на основе их сообщений count ??Сортировать по количеству ассоциаций в Grails
3
A
ответ
1
Вы можете сделать это, но для этого требуются два запроса. Это связано с тем, что для упорядочивания по размеру коллекции вам нужно использовать группу, но это требует, чтобы вы перечисляли все свои свойства. Если вы добавите или удалите один запрос, он сломается. Таким образом, решение запустить один запрос, который находит заказанные идентификаторы, а второй, который получает экземпляры для этих идентификаторов:
String hql = '''
SELECT t.id
FROM Topic t LEFT JOIN t.posts AS post
GROUP BY t.id
ORDER BY COUNT(post) DESC
'''
def ids = Topic.executeQuery(hql)
def orderedTopics = Topic.getAll(ids)
7
Вы можете сделать это в одном запросе HQL с функцией размера(). Таким образом, вы получаете Тему экземпляров в одном запросе:
SELECT topic
FROM Topic topic
ORDER BY size(topic.posts)
Я нашел это на http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html, раздел 14.16 Советов & хитрости.