Сходство и различие между jpa и hibernate

что такое сходство и разница между jpa и hibernate.

Ответы

Ответ 1

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

Ответ 2

Это введение JSR-000220 Enterprise JavaBeans 3.0 Final Release (постоянство):

Этот документ является спецификацией Java API для управления персистентностью и объектом/ с Java EE и Java SE. Техническая цель этой работы - предоставить объекта/реляционного сопоставления для разработчика приложений Java с использованием модели домена Java для man- возраст реляционной базы данных.

Этот API персистентности вместе с языком запросов и метаданными объекта/реляционного сопоставления, определенными в этом документе, требуется для поддержки в Enterprise JavaBeans 3.0. Он также предназначен для использования автономно с Java SE.

Ведущие эксперты по всему сообществу Java собрались вместе, чтобы построить этот стандарт сохранения Java. Эта работа включает в себя материалы сообществ Hibernate, TopLink и JDO, а также сообщества EJB.

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

До JPA Hibernate был своего рода стандартом де-факто для сохранения объектов в Java. Hibernate считается основным вкладчиком JPA, поэтому между ними существует много сходства (я мог бы даже сказать, что между всеми решениями ORM, поскольку концепции ORM являются общими). Однако по различным причинам, политическим или техническим, рабочая группа JPA не могла включить все в первый выпуск JPA, поэтому JPA на самом деле является подмножеством Hibernate (это упрощенный взгляд, но реальность очень близка). Таким образом, спящий режим и другая реализация JPA обеспечивают, таким образом, собственные собственные расширения (что означает нестандартные, но не переносные от одного провайдера к другому) стандарт JPA, который вы можете использовать, или нет.

Ответ 3

Как указано в @Pascal Hibernate, существовало до стандарта JPA (теперь JSR 317 JPA 2.0, который Hibernate уже реализовал в 3.5 уже для раннего использования). Таким образом, существуют другие поставщики JPA, например. Oracle TopLink, Apache OpenJPA. Чтобы использовать строго JPA в Hibernate, вы должны использовать EntityManager как прикрепленный к Session, который представляет собой концепцию Hibernate, предшествующую JPA. Аналогично, для строгой JPA вы должны использовать EntityManagerFactory, как показано на SessionFactory.

EntityManager и EntityManagerFactory - это, по сути, тонкие обертки вокруг Session и SessionFactory соответственно. Кроме того, ядро ​​/аннотации Hibernate предоставляют расширения спецификации JPA, которые облегчают вашу жизнь. До того, как JPA 2 Hibernate имел API-интерфейс Criteria, который позволил вам программно построить запрос в OO-модуле. JPA 2 теперь делает эту функциональность стандартной - стандарт JPA немного отличается от версии Hibernate, так как использует дженерики. Таким образом, в основном функциональность Hibernate представляет собой надмножество JPA.

Ответ 4

Здесь приведен список некоторых различий между темами (выдержки из документации Hibernate)

  • Entity. Hibernate выходит за рамки спецификации JPA и предоставляет дополнительные конфигурации. Некоторые из них размещены на @org.hibernate.annotations.Entity

    • dynamicInsert/dynamicUpdate (по умолчанию false)
    • selectBeforeUpdate (по умолчанию - false)
    • полиморфизмы
    • стойкая бактерия
    • optimisticLock (версия, все, грязные, нет)
  • id как свойство с использованием типа компонента

    • Пока он не поддерживается в JPA, Hibernate позволяет разместить вашу ассоциацию непосредственно во встроенном компоненте id (вместо того, чтобы использовать аннотацию @MapsId).
  • Несколько свойств id без типа идентификатора

    • Другой, возможно более естественный подход - разместить @Id по нескольким свойствам вашего объекта. Этот подход поддерживается только Hibernate (не совместимым с JPA), но не требует дополнительного встраиваемого компонента.
  • Несколько свойств id со специальным типом идентификатора

    • Пока не стандарт JPA, Hibernate позволяет объявить ассоциированное свойство vanilla в @IdClass
  • Генератор идентификаторов

    • Определение уровня пакета не поддерживается спецификацией JPA. Однако вы можете использовать @GenericGenerator на уровне пакета
  • Аннотации

    • Hibernate Annotations поддерживает то, что явно не поддерживается спецификацией JPA. Вы можете аннотировать встроенный объект с аннотацией @MappedSuperclass, чтобы сделать свойства суперкласса постоянными (подробнее см. @MappedSuperclass).
  • дискриминатор

    • @org.hibernate.annotations.DiscriminatorOptions позволяет дополнительно указывать варианты дискриминатора Hibernate, которые не стандартизированы в JPA. Доступными параметрами являются сила и вставка.
  • Транзакция

    • Hibernate предоставляет больше режимов сброса, чем тот, который описан в спецификации JPA. В частностиFlushMode.MANUAL для продолжительной беседы. Для получения дополнительной информации обратитесь к справочной документации по базовому оборудованию Hibernate.
  • Статическая метамодель

    • Важно. На сегодняшний день метамодель JPA 2 не предоставляет никаких возможностей для доступа к реляционной информации, относящейся к физической модели. Ожидается, что это будет рассмотрено в будущей версии спецификации.