Попробую тоже объяснить. Предполагается знакомство читателя с концепцией interface и class в Java.
Начнём с того, что в Java есть на мой взгляд уникальная концепция Java EE. Давным давно она называлась J2EE, потом переименовали в Java EE. Java Enterprise Edition. Хотя звучит, как некая отдельная редакция Java, на самом деле это не так. Java EE это по сути набор интерфейсов для решения ряда типовых задач, например создание веб-страниц (Java Servlet, JavaServer Faces, JSP, EL, ...), отсылка почты (Java Mail), взаимодействие информационных систем (JAX WS, JAX RS, JAXB). И, конечно, для работы с БД там есть свои интерфейсы. Собственно JPA это и есть набор интерфейсов для работы с БД в стиле ORM.
Предполагается, что разработчик использует эти интерфейсы в своём коде. Конечно интерфейсы сами по себе работать не могут, кто-то должен их реализовывать. Собственно есть ряд реализаций по каждой спецификации. Для JPA из самых известных это Hibernate, EclipseLink, DataNucleus, может ещё какие есть. Из них Hibernate можно считать эдаким стандартом де-факто. Но суть в том, что в теории разработчик на конкретную реализацию даже не завязывается и её можно поменять не переписывая приложения. Уж насколько это вам важно, вопрос другой.
Что касается исторического экскурса. Давным давно были Entity Beans, как первая попытка в рамках Java EE сделать ORM. Они умерли. Альтернативно появилась и начала набирать популярность библиотека Hibernate. Она тогда никак к J2EE не относилась. В общем ребята из Java EE посмотрели на это дело и по сути передрали Hibernate и назвали это JPA. Ну хорошая идея, чего-б не передрать. А Hibernate в очередной своей версии просто реализовали все нужные интерфейсы и стали этой самой JPA-реализацией. Потом и альтернативы подоспели.
В своём коде считается хорошим тоном оставаться в рамках JPA. Сегодня этого хватает на большинство задач.
Также замечу, что хотя ORM некоторыми рекламируется, как простая альтернатива SQL, я считаю это глубоким заблуждением. ORM это штука мощная и полезная, но она точно не простая. И если использовать тот же Hibernate не разобравшись в нём хорошенько - дров наломаете. Это не к тому, что не надо его использовать, а к тому, что надо его изучить.
JPA - это спецификация. То есть как должно работать объектно-реляционное отображение.
Hibernate - одна из реализаций этой спецификации.
Попробую привести аналогию. Легковой автомобиль - это четырёхколесное транспортное средство с двигателем и массой до 3,5 тонн. Это аналог JPA.
А вот Lada седан или Газель - это уже реализация (аналог Hibernate).
Помощники
243 поста785 подписчиков
Правила сообщества
Нельзя обсуждать Политику.
Ругаться и оскорблять.