Любые недостатки использования Hibernate EntityManager (по сравнениюЯдро гибернации)?

StackOverflow https://stackoverflow.com/questions/3440532

Вопрос

Документация по Hibernate EntityManager состояния, что:

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

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

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

Моя главная забота заключается в следующем:

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

Это было полезно?

Решение

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

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

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

Начиная с JPA 1.0, разработчики Hibernate создали Hibernate3 с учетом "JPA" и приняли семантику JPA, значения по умолчанию и т.д. В Hibernate3.Возможно, вам захочется послушать Гэвина в этом Технический Разговор:Гэвин Кинг о Hibernate3 и EJB3:

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

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

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

Итак, всегда ли возврат к Ядру прост и без проблем?

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

Сопутствующие вопросы

Другие советы

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

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

Не забывайте, как в гибернации аннотации, так и гибернат Entitymanager построен на вершине гибернационного ядра. Так еще один слой. Отказ Кроме того, он полагается на его метаданные сопоставления, хранящиеся в файлах XML. Некоторые пользователи предпочитают использовать XML-файлы вместо аннотаций, потому что он оставляет объекты домена, полностью независимы от выбора реализации DAO. Но при использовании аннотаций Hibernate с книгой JPA ясна

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

JDBC >> Hibernate core >> Hibernate Annotations

...

JDBC >> Hibernate core >> Hibernate EntityManager

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

  • Объектно ориентированный запрос API
  • Обертная @embeddable.
  • Коллекция @embeddables @ElementCollection

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

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

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

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

Очень мало реальных преимуществ API API jpa над Hibernate API - я видел людей, использующих jpa по имени запросы (где критерии, вероятно, были бы яснее и лучше), а аннотации JPA несколько лучше разработаны.

Кроме того, JPA - это просто слой, добавляя сложность и потенциальные накладные расходы - без пособия. Архитектурно в такой ситуации правильное решение было бы против его использования.

Портативность базы данных OTOH очень реальна. У меня есть пользовательские распределители (генераторы), которые я использую, которые полностью портативны, и гораздо более исполнителя и проще, чем сумасшедший беспорядок, который является неправильно разработанным гибернацией.

Такой подход был очень успешным по сравнению с несколькими крупными коммерческими, правительственными и устаревшими проектами по реинжиновническим проектам. Короче говоря - сосредоточиться на том, что важно - и API на вершине API, не так.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top