Для того чтобы Hibernate делал join-ы и подзапросы за вас. Т.е. вы как всегда работаете с обьектами:
вызываете route.getBusses() для получения списка автобусов текущего маршрута, потом можете изменить этот Set как того требует бизнес-логика — все автоматически сохранится в базе. То есть такие маппинги — обычная практика для ORM.
Вместо того чтобы вызывать отдельный DAO метод который вытащит список автобусов по id маршрута и потом сохранять возможные модификации этого списка опять же вызовом еще какого-нибудь метода.
Можно работать и без этих связей — но тогда зачем вам ORM? Если считаете что Hibernate делает за вас «слишком много» — советую обратить внимание на myBatis
www.mybatis.org/, вводный цикл статей
java.dzone.com/articles/getting-started-ibatis-mybatis