Каковы различия между Hibernate и JPA?
когда я был в колледже, изучая веб-программирование, они рассказали нам о hibernate.
мы использовали его некоторое время, у меня даже была возможность работать с ним в реальном сценарии в компании почти 8 месяцев. Теперь, когда я полностью переключаюсь на Java EE 6 (Я влюблен:)), Я использую JPA для моих потребностей ORM.
прошло несколько месяцев с тех пор, как я его использую, но я действительно не понимаю, в чем разница между одним и другим. Почему некоторые говорят одно? или другое лучше или хуже? То, как я делаю свои сопоставления и аннотации в обоих, почти одинаково...
может быть, вы можете решить некоторые мои сомнения:
- каковы преимущества и недостатки каждого из них?
-использует ли Hibernate JPA или наоборот(они зависят друг от друга)?
-с точки зрения функций, какие функции у одного есть, что не имеет другого?
-любые другие различия между обоими?
6 ответов
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.
JPA является стандартом API для отображения персистентности. Он был разработан долго после спячки и сильно под его влиянием.
чтобы использовать JPA, вам нужна реализация JPA. Hibernate-одна из таких реализаций JPA, поскольку она была расширена для реализации API, который она вдохновила.
кроме того, Hibernate предлагает некоторые функции, которые не предлагаются стандартом JPA, но они обычно не нужны.
с другой стороны, если вы используете только функции JPA, ваш код также должен работать с другой реализацией JPA - опыт показывает, что совместимость редко составляет 100%, но переключение на другую реализацию не требует большой работы.
JPA-это стандарт, реализованный многими различными библиотеками, например TopLink. Hibernate-это библиотека, которая существует задолго до JPA и имеет некоторые функции, которых у JPA нет.
API критериев находится в обоих, но я думаю, что Hibernate намного проще в использовании. Таким образом, если вы используете JPA, вы можете переключиться на другую реализацию без проблем, или у вас может быть базовый проект, который определяет базовый JPA dao и два разных проекта, которые используют другой реализация.
Если вы используете Hibernate, вероятно, легче найти примеры и экспертов.
Hibernate был вдохновением для нового современного JPA. EJB 3.0 ORM (JPA) основан на простой, чистой, красивой гибернации.
когда JPA родился, Hibernate стал JBoss ' JPA реализации базы. Поэтому, если вы используете JBoss и JPA, вы, вероятно, используете Hibernate внизу.
Я не могу определить какое-либо значительное преимущество одного над другим. Может быть, главное, что если вы используете JPA, то вы используете чистую реализацию JavaEE. Это значит, что, теоретически вы можете переключиться на другой сервер приложений, и ваше приложение будет работать, даже если новый сервер приложений не использует Hibernate. Имейте в виду, что я сказал В ТЕОРИИ. :-)
JPA использует Hibernate на некоторых серверах приложений. Jboss RedHat является основным продуктом, использующим Hibernate для его реализации JPA.
Я постараюсь объяснить как можно проще.
-каковы преимущества и недостатки каждого?
свойства JPA являются портативными. Библиотеки, начинающиеся с javax.настойчивость связана с JPA. Поставщики, такие как hibernate, предоставляют непереносимые свойства. Таким образом, рекомендуется использовать javax.настойчивость, когда это возможно.
-использует ли Hibernate JPA или наоборот(они зависят от каждого другие)?
JPA является абстракцией над JDBC. JPA-это спецификация. Ему нужен поставщик. Hibernate является одним из многих поставщиков.
-с точки зрения функций, какие функции у одного есть, что не имеет другого?
Hibernate = ORM + реализация JPA Таким образом, вы найдете некоторые дополнительные функции в спящий режим.
-любые другие различия между обоими?
спящий многое изменилось за последние несколько лет. Я нахожу JPA последовательным. Поэтому, если не нужно, попробуйте использовать javax.библиотеки сохраняемости, когда это возможно.
interface JPA {
void merge(Object o);
}
class Hibernate implements JPA {
@Override
public void merge(Object o) {
// Implementation here
}
}