Короткий ответ: Hibernate включает SQLExceptions в непроверенные исключения Hibernate.Таким образом, исключения все еще выбрасываются, вы просто не обязаны их ловить.На практике это нормально, потому что в любом случае во время выполнения вы ничего не можете сделать с этими исключениями, это все равно что база данных недоступна или недопустимая инструкция HQL.Ваша программа должна иметь место, где она перехватывает все исключения, которые еще не обработаны, где она регистрирует имя исключения и трассировку стека.
Hibernate может быть очень полезным, но не совсем облегчает отладку.Hibernate вводит некоторую косвенность (изменение порядка выполнения операторов sql, ввод кеша 1-го уровня с использованием карты идентификаторов и т. Д.), Что может значительно усложнить отладку некоторых вещей.Одно из преимуществ Hibernate перед JDBC заключается в том, что у вас нет ужасного, подверженного ошибкам стандартного кода, который вы получаете с JDBC, однако вы получаете то же преимущество, если используете Ibatis (недавно переименованный в MyBatis) или Spring-JDBC, без осложнений, которыеHibernate представляет.
Лично мне очень нравится Hibernate, он очень мощный, но он сложный, и он доставит вам неприятности, если вы не потратите время, чтобы понять, что происходит.Но JDBC даже не входит в список решений, которые я бы рекомендовал для большинства случаев, это жалкий API для кодирования, и его обертывание в лучшую библиотеку является проблемой, которая уже решалась много раз.