Каковы различия между Hibernate и JPA? - PullRequest
11 голосов
/ 15 апреля 2011

Когда я учился в колледже изучать веб-программирование, они рассказали нам о спящем режиме.

Мы использовали его некоторое время, у меня даже была возможность поработать с ним в реальном сценарии в компании почти 8 месяцев. Теперь, когда я полностью перешел на Java EE 6 ( Я влюблен:) ), я использую JPA для своих нужд ORM.

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

Может быть, вы можете решить некоторые из моих сомнений:

-Какие преимущества и недостатки у каждого?

- Использует ли Hibernate JPA или наоборот (зависят ли они друг от друга)?

- С точки зрения возможностей, какие функции у одного есть, а у другого нет?

- Есть ли другие различия между ними?

Ответы [ 6 ]

8 голосов
/ 15 апреля 2011

JPA (Java Persistence API) - это API, JPA 2.0 относится к группе JSR 317.По сути, это платформа для управления реляционными данными с использованием ORM (Object Relational Mapping) для сохранения данных.

Hibernate - это библиотека ORM, которая отображает ваши POJO / JavaBeans на сохранение ваших данных.И ORM, и JPA имеют объектные / реляционные метаданные (XML, аннотации) для отображения POJO в таблицы БД.

Использует ли Hibernate JPA или наоборот (зависят ли они друг от друга)?

Hibernate 3 теперь поддерживает JPA 2.0.JPA - это спецификация, описывающая отношения и управление реляционными данными с использованием объектной модели.Поскольку JPA является API, Hibernate реализует этот API.Все, что вам нужно сделать, это написать свою программу, используя классы / интерфейсы API JPA, настроить Hibernate как ресурс JPA и вуаля, у вас работает JPA.

Каковы преимущества и недостатки каждого из них?

Преимущества:

  • Предотвращает низкоуровневый код JDBC и SQL.
  • Это бесплатно (EclipseLink, например, для JPA).
  • JPA являетсястандарт и часть EJB3 и Java EE.

Это все, что я знаю о Hibernate.

7 голосов
/ 15 апреля 2011

JPA - это стандарт API для отображения постоянства. Он был разработан долгое время после гибернации и находился под его сильным влиянием.

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

Кроме того, Hibernate предлагает некоторые функции, которые не предлагаются стандартом JPA, но обычно они не нужны.

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

3 голосов
/ 15 апреля 2011

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

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

Если вы используете Hibernate, вам, вероятно, будет легче найти примеры и экспертов.

1 голос
/ 15 апреля 2011

Hibernate был вдохновением для нового современного JPA. EJB 3.0 ORM ( JPA ) основан на простом, чистом, красивом Hibernate.

Когда появился JPA, Hibernate стал основой реализации JPA в JBoss. Так что, если вы используете JBoss и JPA, вы, вероятно, используете Hibernate внизу.

Я не могу заметить какого-либо существенного преимущества одного над другим. Может быть, главное, что если вы используете JPA, то вы используете чистую реализацию JavaEE. Это означает, что теоретически вы можете переключиться на другой сервер приложений, и ваше приложение будет работать, даже если новый сервер приложений не использует Hibernate. Имейте в виду, что я сказал В ТЕОРИИ . : -)

JPA использует Hibernate на некоторых серверах приложений. JBoss от RedHat - основной продукт, использующий Hibernate для реализации JPA.

0 голосов
/ 01 сентября 2016

Я постараюсь объяснить как можно проще.

- Каковы преимущества и недостатки каждого из них?

Свойства JPA являются переносимыми.Библиотеки, начинающиеся с javax.persistence, связаны с JPA.Такие провайдеры, как Hibernate, предоставляют непереносимые свойства.Таким образом, наилучшей практикой является использование javax.persistence, когда это возможно.

- Использует ли Hibernate JPA или наоборот (зависят ли они друг от друга)?

JPA является абстракцией над JDBC.JPA - это спецификация.Требуется поставщик.Hibernate - один из многих провайдеров.

- С точки зрения возможностей, какие функции у одного нет, а у другого нет?

Hibernate = ORM+ Реализация JPA Таким образом, вы найдете некоторые дополнительные функции в Hibernate.

- Есть ли другие различия между ними?

Hibernate сильно изменился за последние несколько лет.Я нахожу JPA последовательным.Поэтому, если не нужно, попробуйте использовать библиотеки javax.persistence, когда это возможно.

0 голосов
/ 07 августа 2015
interface JPA {
    void merge(Object o);
}

class Hibernate implements JPA {
    @Override
    public void merge(Object o) {
        // Implementation here
    }
}
...