按Grails中的关联计数排序

按Grails中的关联计数排序,grails,gorm,Grails,Gorm,我有很多主题对象,每个主题都有很多帖子:Post 如何根据帖子数量对所有主题对象进行排序???您可以这样做,但需要两个查询。这是因为要按集合的大小排序,需要使用“分组依据”,但这需要枚举所有主题属性。如果添加或删除一个,查询将中断。因此,解决方案是运行一个查询查找有序ID,第二个查询获取这些ID的实例: String hql = ''' SELECT t.id FROM Topic t LEFT JOIN t.posts AS post GROUP BY t.id ORDER BY COUNT(

我有很多主题对象,每个主题都有很多帖子:Post
如何根据帖子数量对所有主题对象进行排序???

您可以这样做,但需要两个查询。这是因为要按集合的大小排序,需要使用“分组依据”,但这需要枚举所有主题属性。如果添加或删除一个,查询将中断。因此,解决方案是运行一个查询查找有序ID,第二个查询获取这些ID的实例:

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)

您可以使用size()函数在一个HQL查询中完成此操作。通过这种方式,您可以在一个查询中获得主题实例:

SELECT topic
FROM Topic topic
ORDER BY size(topic.posts)
我在第14.16节“技巧和窍门”中找到了这一点