IMO, упаковка исключений (проверено или нет) имеет несколько преимуществ, которые стоят затрат:
1) Это побуждает вас думать о режимах сбоя для кода, который вы пишете. По сути, вы должны учитывать исключения, которые может вызывать код, который вы вызываете, и, в свою очередь, вы будете учитывать исключения, которые вы будете генерировать для кода, который вызывает ваш код.
2) Это дает вам возможность добавить дополнительную отладочную информацию в цепочку исключений. Например, если у вас есть метод, который генерирует исключение для дублированного имени пользователя, вы можете заключить это исключение в одно, включающее дополнительную информацию об обстоятельствах сбоя (например, IP-адрес запроса, предоставившего двойное имя пользователя), который не был доступен для кода нижнего уровня. Файл cookie с исключениями может помочь вам отладить сложную проблему (это, безусловно, имеет для меня).
3) Позволяет вам не зависеть от реализации кода нижнего уровня. Если вы переносите исключения и вам нужно заменить Hibernate на какой-либо другой ORM, вам нужно всего лишь изменить код обработки Hibernate. Все остальные уровни кода будут по-прежнему успешно использовать обернутые исключения и будут интерпретировать их таким же образом, даже если основные обстоятельства изменились. Обратите внимание, что это применимо, даже если Hibernate каким-либо образом изменяется (например: они переключают исключения в новой версии); это не только для оптовой замены технологии.
4) Рекомендуется использовать разные классы исключений для представления разных ситуаций. Например, у вас может быть исключение DuplicateUsernameException, когда пользователь пытается повторно использовать имя пользователя, и исключение DatabaseFailureException, когда вы не можете проверить наличие дублированных имен пользователей из-за разорванного соединения с БД. Это, в свою очередь, позволяет вам гибко и эффективно ответить на ваш вопрос («как мне восстановиться?»). Если вы получили исключение DuplicateUsernameException, вы можете предложить другое имя пользователя. Если вы получаете исключение DatabaseFailureException, вы можете позволить ему всплывать до того момента, когда он отображает пользователю страницу «не работает», и отправляет вам уведомление по электронной почте. Если у вас есть пользовательские исключения, у вас есть настраиваемые ответы - и это хорошо.