2010-04-06 5 views

ответ

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 Советов & хитрости.