You can do it in one HQL query with size() function. This way you get Topic instances in one query:
SELECT topic
FROM Topic topic
ORDER BY size(topic.posts)
I've found this on http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html, section 14.16 Tips & Tricks.