Есть ли хорошая причина для настройки hibernate с помощью XML, а не с помощью аннотаций? - PullRequest
17 голосов
/ 17 января 2009

Я использую Hibernate уже несколько лет, но использую его только с аннотациями и настройкой параметров подключения в моем коде.

Я "что-то упускаю", не используя файлы XML? Есть ли важные возможности, доступные только в XML? Существуют ли ситуации или шаблоны, в которых имеет смысл использовать XML?

Ответы [ 9 ]

7 голосов
/ 17 января 2009

Я думаю, что можно с уверенностью сказать, что вы ничего не пропустите.

Если в XML есть какие-либо возможности, которые нельзя представить в атрибутах (и я полагаю, что есть редкие случаи), тогда у вас все еще есть возможность использовать [RawXml] и записать XML в атрибуте. Таким образом, вы не можете пропустить ни одной функции.

Возможно, имеет смысл использовать XML, если в вашей команде достаточно программистов, которые просто предпочитают управлять отдельными файлами, или если есть реальная необходимость редактировать сопоставления XML на лету. Файлы сопоставления XML, вероятно, легче манипулировать для очень сложного сопоставления, и они могут содержать полезную информацию (комментарии по стратегиям извлечения и т. Д.).

Существует также проблема архитектуры, в которой некоторые люди утверждают, что разделение сопоставления на файлы XML обеспечивает лучшее разделение между связанным с бизнесом кодом и инструкциями о том, как оно сохраняется.

6 голосов
/ 17 января 2009

Аннотации - отличный способ быстро настроить Hibernate. Но одна из ключевых особенностей картографических операторов OR, таких как Hibernate, заключается в том, что вы сохраняете свою доменную модель "невежественной", поэтому вашим объектам не нужно знать, где и как они сохраняются. Некоторые могут утверждать, что использование аннотаций нарушает это. А в ситуациях, когда настойчивость является лишь одной из многих проблем, имеет смысл держать вещи отдельно.

Другая причина может заключаться в том, что доменные объекты сохраняются по-разному в разных ситуациях, у вас может быть несколько баз данных, используемых одним приложением, или даже больше приложений, использующих одну и ту же модель домена.

5 голосов
/ 17 января 2009

Разве Hibernate не использует стандартные аннотации EJB3 / JPA? Если так, я могу придумать хотя бы одну причину использования XML: эти аннотации не обладают всеми возможностями Hibernate.

Пример: Hibernate может определять «родной» тип для идентификаторов. Это создаст поле автоинкремента в MySQL и последовательность в Oracle. Это невозможно сделать с помощью аннотаций JPA, которые будут работать в обеих ситуациях.

Кроме того, XML является подключаемым. Аннотации нет. Это может иметь значение для вас, если вы отправляете на несколько платформ баз данных и имеете разные конфигурации для каждой из них.

XML потерял популярность у многих разработчиков, и только по этой причине я думаю, что многие одобряют аннотации. Дело в том, что у вас все равно есть XML (в виде файла persistence.xml и, возможно, других). Это похоже на шесть из одного, полдюжины другого.

1 голос
/ 17 января 2009

В аннотациях почти ничего нельзя сделать в XML. Я даже не могу думать ни о чем. Вы можете попробовать соответствовать JPA, но я обнаружил, что JPA API довольно ограничен. Тем не менее, это просто означает, что вы используете нестандартные аннотации, специфичные для Hibernate.

Есть несколько комментариев, в которых говорится, что спящие аннотации загрязняют ваши доменные модели, но в любом случае они тесно связаны с макетом вашей базы данных. В любом коде, который не управляется базой данных, вам все равно потребуется создать промежуточный уровень. Фактически, IMHO, многие веб-приложения должны использовать объекты промежуточных значений, которые копируют только данные, необходимые для уровня представления. Вместо этого многие используют открытую сессию в виде antipattern.

Наконец, хотя конфигурация xml является гибкой, обычная практика показывает, что всякий раз, когда мы редактируем файлы xml, мы почти всегда также редактируем исходные файлы java. Это просто еще один аргумент для перемещения конфигурации ближе к объектам, то есть в аннотации.

0 голосов
/ 31 декабря 2012
  • В настоящее время невозможно использовать жидкую базу с аннотациями.
  • Невозможно создать объекты базы данных с аннотациями, вам придется использовать

    cfg.addAuxiliDatabaseObject (новый SimpleAuxiliDatabaseObject (... sql здесь ...))

для создания специальных инструкций sql.

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

Я обнаружил, что аннотации облегчают использование столбцов UUID / GUID по сравнению с отображением их в XML. Но опять же, я новичок в Hibernate.

0 голосов
/ 08 марта 2010

Я не знаю, включаете ли вы именованные запросы в конфигурацию, но я склонен помещать их в файлы XML, даже если я считаю, что это повышает риск ошибок между сущностью и ее запросами. Позволяет настроить запрос без перекомпиляции всего приложения.

Использование XML вместо аннотации может также избежать зависимости JPA на уровне пользовательского интерфейса, если вы повторно используете свои сущности от бизнес-уровня до уровня представления, но я не уверен, что аргумент уместен.

0 голосов
/ 17 января 2009

Не хочу повторять ничего, что уже было сказано, но я использую конфигурацию в стиле XML, чтобы отделить ее от своего кода. Это в основном делается с моими личными предпочтениями, и в конце концов это не имеет значения :) Еще одна вещь, которую вы можете сделать с XML, - это заставить hbm2java генерировать ваш код для вас, и я тоже так делаю, но опять же преимущество; вероятно нет.

Так что я бы сказал, что это просто вопрос того, что вы предпочитаете.

0 голосов
/ 17 января 2009

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

Однако, по разным причинам, я не сохраняю свою модель домена напрямую, а скорее имею аналог (но несколько отличную) «модель постоянного домена», которая сохраняется и присутствует только на сервере, так что это не было большим вопрос.

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