Hibernate облегчает отладку? - PullRequest
0 голосов
/ 04 марта 2011

Я знаю, Hibernate - это ORM, который напрямую отображает объекты в данные таблиц.Значит ли это, что hibernate облегчает отладку?Я студент и самообучаюсь в спящем режиме.Я столкнулся с программой в спящем режиме, где мне не приходилось использовать блок try-catch, как мы обычно делаем с логикой JDBC, которую мы вставили в программу.Поэтому мой вопрос заключается в том, как обрабатываются исключения и легче ли отлаживать их в спящем режиме, чем в JDBC?

Ответы [ 3 ]

1 голос
/ 05 марта 2011

Короткий ответ: Hibernate включает SQLExceptions в непроверенные исключения Hibernate.Таким образом, исключения все еще выбрасываются, вы просто не обязаны их ловить.На практике это нормально, потому что в любом случае во время выполнения вы ничего не можете сделать с этими исключениями, это все равно что база данных недоступна или недопустимая инструкция HQL.Ваша программа должна иметь место, где она перехватывает все исключения, которые еще не обработаны, где она регистрирует имя исключения и трассировку стека.

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

Лично мне очень нравится Hibernate, он очень мощный, но он сложный, и он доставит вам неприятности, если вы не потратите время, чтобы понять, что происходит.Но JDBC даже не входит в список решений, которые я бы рекомендовал для большинства случаев, это жалкий API для кодирования, и его обертывание в лучшую библиотеку является проблемой, которая уже решалась много раз.

0 голосов
/ 03 ноября 2011

Отображение таблиц на объекты - это только одна из функций, которые предоставляет Hibernate. Вы не можете пропустить другие важные функции, такие как

  • кеширование (как кеширование объектов, так и запросов)
  • Обработка генерации прокси и отложенная загрузка ассоциаций объектов.
  • Управление ассоциациями (каскадные функции, которые помогают управлять жизненными циклами объектов)

Поскольку оба ответа @Nathan Hughes и @ z7sg Ѫ указывают, что Hibernate оборачивает SQLExceptions с RuntimeExceptions, и, следовательно, нам не нужно иногда писать некрасивые и нежелательные циклы try...catch.

Однако Hibernate также позволяет вам указывать Dialect [базовую базу данных] и помогает настраивать исключения, специфичные для используемой базы данных. Он также позволяет генерировать статистическую информацию о выполняемых запросах, поэтому что вы можете улучшить свои методологии доступа к данным.

Оформить заказ это для дальнейшей настройки

0 голосов
/ 06 марта 2011

Причина, по которой вам не нужно использовать блоки try / catch для запросов гибернации, заключается в том, что генерируемые им исключения являются исключениями без проверки, тогда как запросы JDBC могут генерировать проверенные исключения SQLExceception. Вы можете захотеть перехватить и обработать исключения HibernateEx так или иначе.

Гораздо проще программировать с помощью Hibernate (или другой среды ORM), чем с прямым JDBC, потому что он выполняет большую часть тяжелой работы по преобразованию реляционных данных в объекты, и это, вероятно, будет означать, что у вас будет меньше ошибок. Но есть много сложностей и подводных камней в Hibernate, как и в любом программном инструменте ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...