J'ai de nombreux objets Sujet et chaque sujet a de nombreux messages: Message Comment puis-je commander tous les objets Sujet en fonction de leur nombre de messages ??Trier par nombre d'association dans Grails
3
A
Répondre
1
Vous pouvez le faire, mais cela nécessite deux requêtes. Cela est dû au fait que, pour trier selon la taille d'une collection, vous devez utiliser un «groupe par», mais cela nécessite que vous énumériez toutes les propriétés de votre sujet. Si vous ajoutez ou en supprimez un, la requête va se casser. Donc, la solution consiste à exécuter une requête qui trouve ids ordonnée, et une seconde qui obtient les instances pour les ids:
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
Vous pouvez le faire dans une requête HQL avec fonction de la taille(). De cette façon, vous obtenez des instances Sujet dans une requête:
SELECT topic
FROM Topic topic
ORDER BY size(topic.posts)
J'ai trouvé cela sur http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html, section 14.16 Conseils & astuces.