Есть ли веская причина настраивать спящий режим с помощью XML, а не через аннотации?
Я использую Hibernate в течение нескольких лет, но использовал его только с аннотациями и установил параметры подключения в своем коде.
"Я пропустил что-то", не используя XML файлы? Существуют ли важные возможности, доступные только в XML? Существуют ли ситуации или шаблоны, где имеет смысл использовать XML?
Ответы
Ответ 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.