Установите cascade = "delete-orphan, all", и операция удаления будет касаться учебников и приложений, а также удалит их, если они осиротят (не связаны ни с каким другим курсом).
Мы используем аннотации в спящем режиме, поэтому я не совсем уверен, какой именно xml добавить, но из документов он выглядит так: cascade = "all-delete-orphan" должен быть в каждом из этих определений коллекции.