Каковы различия / сходства между спящим и другими фреймворками или спецификациями? - PullRequest
0 голосов
/ 27 апреля 2010

Я хочу знать различия / сходства между Hibernate и простым постоянством в Java EE 5?

Мне неясно, реализует ли Hibernate реализацию персистентности Java EE 5 или это совершенно другой подход к представлению данных в серверных системах.

Я запутался в Hibernate и его связи с концепциями сохранения Java, приведенными в руководстве по Java EE 5 ... Не могли бы вы уточнить роль Hibernate в контексте сущностей и EJB?

Кроме того, я хочу знать другие подходы (фреймворки), такие как JPA или Spring ...

Ответы [ 5 ]

4 голосов
/ 28 апреля 2010

Я хочу знать различия / сходства между Hibernate и простым постоянством в Java EE 5?

Стандартизированная API Java EE 5 - это JPA 1.0 и является разновидностью унифицированной версии EJB 2 CMP, JDO, Hibernate и TopLink API и продуктов. Hibernate - это среда ORM, которая предшествовала JPA и сильно повлияла на спецификацию JPA (создатель Hibernate является членом экспертной группы JPA). Просто помните, что JPA - это всего лишь API, вам нужна реализация JPA, чтобы использовать его.

Мне не ясно, реализует ли Hibernate реализацию персистентности Java EE 5 или это совершенно другой подход к представлению данных в серверных системах.

Да, Hibernate обеспечивает реализацию JPA (а также расширяет ее, Hibernate - это расширенный набор JPA) через проект Hibernate EntityManager (который опирается на Hibernate Core ).

Я запутался в Hibernate и его связи с концепциями персистентности Java, приведенными в учебном руководстве по Java EE 5 ... Не могли бы вы уточнить роль Hibernate в контексте сущностей и EJB?

Hibernate может использоваться как поставщик сохраняемости JPA, то есть как фрагмент кода, который фактически сохраняет сущности EJB 3 (спецификация JPA была частью спецификации EJB 3.0 в версии 1.0, теперь это отдельная спецификация)

Кроме того, я хочу знать другие подходы (фреймворки), такие как JPA или Spring ...

Spring не является средой персистентности, Spring является контейнером IoC, он не конкурирует с Hibernate.

JPA-совместимые альтернативы Hibernate включают TopLink Essentials (RI в Java EE 5), EclipseLink (который также является RI JPA 2.0 в Java EE 6), OpenJPA, DataNucleus.

Другие опции для персистентности включают JDO (еще один стандартизированный API персистентности), iBATIS (не ORM, это скорее преобразователь данных), JDBC (API низкого уровня) для цитирования наиболее известных.

Проверьте это предыдущий ответ для обзора и некоторого исторического фона.

1 голос
/ 28 апреля 2010

Когда JPA (стандарт персистентности Java EE 5) был разработан группой экспертов JCP (JSR 220), многие идеи были взяты из существующего Hibernate (также из JDO). Гевин Кинг, сам основатель Hibernate, был частью экспертной группы.

После публикации окончательной спецификации JPA Hibernate стал ее реализацией с открытым исходным кодом (начиная с версии 3.2). Hibernate по-прежнему имеет более богатый набор функций и обычно генерирует новые функции быстрее, поскольку процесс разработки с открытым исходным кодом, как правило, быстрее, чем процесс сообщества Java.

Другие реализации JPA:

  • DataNucleus
  • EclipseLink
  • OpenJPA

Другие подходы:

  • СДО
  • Ibatis
  • обычный JDBC
1 голос
/ 28 апреля 2010

Проверьте эту диаграмму с http://www.hibernate.org:

альтернативный текст http://www.hibernate.org/mainColumnParagraphs/00/imageBinary/HibernateStacks.png

В прошлом, в древние дни J2EE, Hibernate был основным игроком в мире постоянства. Были конкуренты, но постоянный код не подлежал обмену. Позже, когда Java EE 5, преемник J2EE, находился в разработке, новый Java Persistence API (JPA) был определен с помощью ведущего сотрудника Hibernate, Гэвина Кинга, с целью еще больше абстрагировать постоянство и указать его в единый договор. Таким образом, можно легко выбирать и обмениваться реализацией JPA без изменения кода (как, например, в API JDBC). На данный момент под каждой Hibernate JPA , EclipseLink (ранее известной как TopLink) и OpenJPA в качестве реализаций JPA.

Я думаю, что вы на самом деле путаете между "Добрым старым" Hibernate и современным Hibernate JPA. Надеюсь, теперь все прояснилось.

0 голосов
/ 06 мая 2010

Немного не по теме, но JPA подразумевает "сессионно-ориентированную" архитектуру. То есть ваши бины подключены / отсоединены к EntityManager, и вы сохраняете / объединяете / очищаете entityManager.

Если вы ищете «безсессионный» подход к ORM (без прикрепленного / отсоединенного постоянного / слияния / сброса), вы также можете взглянуть на Ebean ORM, которое также использует аннотации JPA для отображения. Вы также можете описать это как «Ebean обеспечивает автоматическое управление контекстом постоянства».

0 голосов
/ 28 апреля 2010

Спецификация JPA, описанная в EE5, является просто спецификацией. Это означает, что это не продукт. JPA - это просто набор определений, которые различные поставщики должны выполнить, чтобы быть «жалобой JPA»

Hibernate - это просто еще один «подключаемый» поставщик сохраняемости, это означает, что этот продукт реализует определения, приведенные в спецификации JPA. Вы можете найти другие похожие продукты, такие как TopLink или Apache OpenJPA.

Вот и все.

...