2016-03-04 4 views
1

Насколько я знаю, есть два способа настройки JPA/Hibernate: конфигурация на основеКонфигурация Java для Hibernate/JPA?

  • XML через что-то вроде hibernate.cfg.xml. Мне не нравится его подход, потому что, ну, XML ...
  • Через аннотации в объекте сущности. Гораздо лучше, чем XML-конфиг, но он связывает мои сущности с JPA.

Поскольку я в настоящее время изучаю архитектуру, в которой модель домена ничего не знает о базе данных (архитектура «Onion»), я ищу способ указать сопоставления без изменения моих объектов.

Конечно, я может создавать отдельные классы сопоставления, например. если у меня есть объект домена Customer, создайте JPA-аннотированную CustomerEntity и позвольте репозиторию переводить из одного в другой. Но этот подход не совсем корректен, потому что Customer и CustomerEntity будут по существу одинаковыми.

Так что, похоже, мне нужно прибегнуть к конфигурации XML Hibernate, но, как упоминалось ранее, мне не нравится этот подход. Весна имеет приятный способ настройки: конфигурация на основе Java. Мне было интересно, есть ли что-то подобное для конфигурации Hibernate/JPA, а если нет, почему бы и нет?

Мои извинения, если ни один из выше не имеет смысла, но любая помощь приветствуется, даже если он не отвечает на мой вопрос :-)

+0

Являются ли аннотации эффективными Java? –

+0

Да, но это не то, что я имел в виду. Моя цель - отделить отображение JPA от объектов домена. При использовании аннотаций это не так. –

+0

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

ответ

0

Очевидно, есть что-то вроде Fluent NHibernate для C#, что делает именно то, что я искал.

К сожалению, для Java не существует «Fluent Hibernate».

На GitHub существует проект fluent-hibernate, но, похоже, это говорит о том, что он свободно пишет HQL-запросы, а не о картографических конфигурациях.

0

Я никогда не слышал о Onion Theory из Java EE дизайна. Я слышал о The Onion, но это сатирический бюллетень (если это :-). Разделение проблем в Java EE I обычно выражается в виде архитектуры MVC или Model View Controller. Вашими страницами JSP или JSF будет ваш взгляд, ваши контроллеры @ManagedBean станут вашими контроллерами, и ваша модель будет содержать ваши сущности.

Модель, где находится JPA, обычно может быть дополнительно разделена на Service Layer, Persistence Layer и EIS (Enterprise Information System) или уровень базы данных. Уровень обслуживания будет содержать ваши EJB, аннотированные Stateless, Statefull или Singleton и инкапсулируют бизнес-логику для приложения. Persistence Layer будет иметь @Entity аннотированные объекты, которые хранятся в базе данных.

Java EE определяет эти слои с помощью JSR с номерами определенного типа. Например, Java Persistence API (JPA) является JSR-220. Тесты разработаны против этих JSR, и если поставщик отвечает этим тестам, то их продукт может быть (более или менее) заменен для другой версии vender.

+0

А, классическая многоуровневая архитектура. У этого есть свои проблемы. Как я уже упоминал, я занимаюсь исследованием архитектуры другого типа под названием «Архитектура лука». Если вы не знаете, что это такое, выполните поиск в Google. Это легко найти. Дело в том, что JPA не будет в модели. Да, с JPA вы можете обменять Oracle и обменять в MSSQL, но что, если вы хотите перейти на Neo4j? Или облачное хранилище? Невозможно сделать это с помощью JPA-аннотированных заявок. –

Смежные вопросы