Разница между JPA и Hibernate

JPA против Hibernate

Почти все корпоративные приложения должны регулярно получать доступ к реляционным базам данных. Но проблемой, с которой сталкивались более ранние технологии (такие как JDBC), было несоответствие импеданса (различие между объектно-ориентированными и реляционными технологиями). Решение этой проблемы было введено посредством введения абстрактного уровня, называемого уровнем постоянства, который инкапсулирует доступ к базе данных из бизнес-логики. JPA (Java Persistence API) - это платформа, предназначенная для управления реляционными данными (с использованием уровня персистентности) в приложениях Java. Существует много реализаций JPA от поставщиков, используемых в сообществе разработчиков Java. Hibernate является наиболее популярной такой реализацией JPA (DataNucleus, EclipseLink и OpenJPA - некоторые другие). Новейшая версия JPA (JPA 2.0) полностью поддерживается Hibernate 3.5, выпущенной в марте 2010 года..

Что такое JPA?

JPA - это структура для управления реляционными данными для Java. Его можно использовать с приложениями, использующими JSE (Java Platform, Standard Edition) или JEE (Java Platform, Enterprise Edition). Его текущая версия - JPA 2.0, выпущенная 10 декабря 2009 года. JPA заменила компоненты EJB 2.0 и EJB 1.1 (которые были подвергнуты резкой критике за то, что они были тяжеловесны сообществом разработчиков Java). Хотя бины сущностей (в EJB) предоставляли персистентные объекты, многие разработчики использовали вместо этого относительно легкие объекты, предлагаемые DAO (объектами доступа к данным) и другими аналогичными средами. В результате был представлен JPA, и он охватил многие из опрятных особенностей упомянутых выше структур.

Постоянство, как описано в JPA, охватывает API (определенный в javax.persistence), JPQL (Java Platform, Enterprise Edition) и метаданные, необходимые для реляционных объектов. Состояние персистентного объекта обычно сохраняется в таблице. Экземпляры сущности соответствуют строкам таблицы реляционной базы данных. Метаданные используются для выражения отношений между сущностями. Аннотации или отдельные файлы XML-дескрипторов (развернутые с приложением) используются для указания метаданных в классах сущностей. JPQL, аналогичный SQL-запросам, используется для запросов к хранимым объектам.

Что такое Hibernate?

Hibernate - это фреймворк, который можно использовать для объектно-реляционного отображения, предназначенного для языка программирования Java. Более конкретно, это библиотека ORM (объектно-реляционное отображение), которую можно использовать для сопоставления объектно-реляционной модели с традиционной реляционной моделью. Проще говоря, он создает отображение между классами Java и таблицами в реляционных базах данных, а также между типами данных Java и SQL. Hibernate также может использоваться для запроса и извлечения данных путем генерации вызовов SQL. Поэтому программист освобождается от ручной обработки наборов результатов и преобразования объектов. Hibernate выпущен в виде свободной среды с открытым исходным кодом, распространяемой по лицензии GNU. Реализация для JPA API предоставляется в Hibernate 3.2 и более поздних версиях. Гэвин Кинг является основателем Hibernate.

В чем разница между JPA и Hibernate?

JPA является платформой для управления реляционными данными в приложениях Java, в то время как Hibernate является специфической реализацией JPA (поэтому в идеале JPA и Hibernate нельзя сравнивать напрямую). Другими словами, Hibernate является одной из самых популярных платформ, которая реализует JPA. Hibernate реализует JPA через библиотеки Hibernate Annotation и EntityManager, которые реализованы поверх библиотек Hibernate Core. И EntityManager, и Annotations следуют жизненному циклу Hibernate. Новейшая версия JPA (JPA 2.0) полностью поддерживается Hibernate 3.5. Преимущество JPA состоит в том, что он имеет стандартизированный интерфейс, поэтому сообщество разработчиков будет более знакомо с ним, чем Hibernate. С другой стороны, нативные Hibernate API-интерфейсы можно считать более мощными, поскольку их функции являются расширенным набором функций JPA..