Подтвердить что ты не робот

Есть ли веская причина настраивать спящий режим с помощью XML, а не через аннотации?

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

    cfg.addAuxiliaryDatabaseObject(новый объект SimpleAuxiliaryDatabaseObject (... sql здесь...))

чтобы создать некоторые специальные инструкции sql.