Hibernate. Для чего нужны коллекции связей?
Перед тем, как изучать Hibernate, лучше сначала ознакомиться с самим SQL, тогда вам станет много понятнее, да и у Hibernate есть приличный мануал, которого с лихвой хватит, чтобы начать работать фрэймворком
Для того чтобы Hibernate делал join-ы и подзапросы за вас. Т.е. вы как всегда работаете с обьектами:
вызываете route.getBusses() для получения списка автобусов текущего маршрута, потом можете изменить этот Set как того требует бизнес-логика — все автоматически сохранится в базе. То есть такие маппинги — обычная практика для ORM.

Вместо того чтобы вызывать отдельный DAO метод который вытащит список автобусов по id маршрута и потом сохранять возможные модификации этого списка опять же вызовом еще какого-нибудь метода.

Можно работать и без этих связей — но тогда зачем вам ORM? Если считаете что Hibernate делает за вас «слишком много» — советую обратить внимание на myBatis www.mybatis.org/, вводный цикл статей java.dzone.com/articles/getting-started-ibatis-mybatis