Какие-либо недостатки использования Hibernate EntityManager (по сравнению с Hibernate Core)?

Документация Hibernate EntityManager утверждает , что:

Вы можете использовать комбинацию всех трех вместе, аннотации без программных интерфейсов JPA и жизненного цикла, или даже чистый собственный Hibernate Core, в зависимости от бизнеса и технических потребностей вашего проекта. Вы можете в любое время вернуться к собственным API Hibernate или, при необходимости, даже к собственным JDBC и SQL.

Код, использующий JPA API (EntityManager), явно более переносим (даже с периодическими откатами на Hibernate Core).

Но будут ли у меня какие-то преимущества при использовании только Hibernate Core? Интересно, действительно ли модель JPA 2 подходит поверх Hibernate Core без каких-либо противоречий? IOW, всегда ли легко и без проблем вернуться к Core?

Меня больше всего беспокоит следующее:

Может быть, различия не только в API, но и в базовой семантике ?! (например, различная семантика транзакций / управления версиями / блокировками, которые могут конфликтовать: пессимистическая блокировка упоминается в документации Core, но не в документации EntityManager - так что могу ли я использовать пессимистическую блокировку, возвращаясь к Core, не вызывая проблем? Такие вещи .. .)

15
задан Pascal Thivent 17 August 2010 в 05:01
поделиться

3 ответа

Но будут ли у меня какие-то преимущества при использовании исключительно Hibernate Core?

Если JPA 2.0 поддерживает то, что вам нужно, то, на мой взгляд, нет никаких преимуществ при использовании Hibernate Core напрямую (а с JPA 2.0 разрыв стал более тонким, делая необходимость возврата к Core исключением, а не правилом, что очень хорошо).

Интересно, действительно ли модель JPA 2 подходит к Hibernate Core без каких-либо противоречий?

Да, подходит, начиная с JPA 1.0. Разработчики Hibernate создали Hibernate3 с "JPA в голове" и приняли семантику JPA, значения по умолчанию и т.д. в Hibernate3. Вы можете послушать Гэвина в этом Tech Talk: Gavin King on Hibernate3 and EJB3:

В этом техническом выступлении Кинг обсуждает как Hibernate3 основывается на и расширяет EJB3, затрагивая такие темы, как:

  • Новые возможности Hibernate3
  • Отношения между Hibernate3 и контейнером EJB3 в JBoss
  • Что отличает Hibernate3 от спецификации EJB3
  • Пользовательские аннотации Hibernate доступны вне EJB
  • Будущее Hibernate

И согласно моему практическому опыту, тот факт, что Hibernate не противоречит EJB 3, является правдой.

То есть, всегда ли откат к Core происходит легко и без проблем?

Используете ли вы Core напрямую или нет, вы используете его (EntityManager является оберткой вокруг Session). Так что, да, вернуться к Core легко, если это действительно необходимо (для вещей, которых все еще нет в спецификации, таких как Query By Example, например). И нет, это не вызовет никаких проблем (поскольку вы действительно используете его или его подмножество в JPA).

Похожие вопросы

13
ответ дан 1 December 2019 в 04:08
поделиться

Преимущества использования JPA api намного превосходят любые недостатки использования чистого hibernate. Я не эксперт, но я не знаю ни одной ситуации, в которой было бы выгодно опуститься до hibernate. (Опускаться до чистого JDBC - это совсем другое дело.)

Если у кого-нибудь есть примеры, которыми можно поделиться, я бы с удовольствием их посмотрел.

0
ответ дан 1 December 2019 в 04:08
поделиться

Было ясно: в зависимости от бизнеса и технических потребностей вашего проекта

Но есть ли у меня какие-либо преимущества при использовании только ядра Hibernate?

Не забывайте, что и Hibernate Annotations, и Hibernate EntityManager построены на основе ядра Hibernate. Итак, еще один слой .Помимо этого, он полагается на свои метаданные отображения, хранящиеся в файлах XML. Некоторые пользователи предпочитают использовать XML-файлы вместо аннотаций, потому что это оставляет объекты домена полностью независимыми от выбранной вами реализации DAO. Но при использовании аннотаций Hibernate с книгой JPA ясен

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

JDBC >> Hibernate core >> Hibernate Annotations

...

JDBC >> Hibernate core >> Hibernate EntityManager

И JPA 2 подходит лучше, чем JPA 1 не был предоставлен. Теперь доступно множество новых функций, таких как

  • API объектно-ориентированных запросов
  • @Embeddable в оболочке
  • Коллекция @Embeddables @ElementCollection

И так далее ...

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

3
ответ дан 1 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: