Что такое реализация JPA? - PullRequest
36 голосов
/ 18 декабря 2010

Я начинаю работать с JPA, и меня смущает, что именно делает реализация JPA (EclipseLink, TopLink, Hibernate и т. Д.).

Я понимаю теоретическую роль JPA, но какова цель различных реализаций? Существуют ли существенные различия между этими вариантами, как, например, разъемы / драйверы БД? Что лучше для новичка?

Я, вероятно, пойду с EclipseLink, потому что именно этим пользуется большинство прочитанной мною литературы.

Ответы [ 5 ]

79 голосов
/ 18 декабря 2010

JPA

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

Аналогия будет использовать JDBC. JDBC - это API для доступа к базам данных, но для подключения к базе данных вам нужна реализация (файл JAR-файла драйвера). Сам по себе, без драйвера, вы ничего не можете сделать с базой данных.

В JPA, как я уже сказал, вам нужна реализация, набор классов, которые находятся "под" JPA, и такая реализация будет делать то, что вы хотите.

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

Популярные реализации включают Hibernate , EclipseLink , OpenJPA и другие.

Каждый из них реализует API JPA, поэтому, если вы используете только JPA, каждая реализация должна действовать одинаково.

Но! Функциональность, предоставляемая этими реализациями, может выходить за рамки стандартного API JPA.

Если вы хотите использовать эту конкретную функциональность, вам придется использовать API конкретного поставщика, который не будет совместим с другими.

Например, хотя JPA определяет аннотацию @Id с параметрами генерации идентификатора, при использовании Hibernate вы также можете использовать @org.hibernate.annotations.GenericGenerator для стратегий генерации, специфичных для Hibernate.

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

Суть в том, что JPA является «наименьшим общим знаменателем», который реализует каждый поставщик, и каждая реализация может иметь более продвинутые функции, которые не являются стандартными.

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

6 голосов
/ 18 декабря 2010

Это то же самое, что и Java, у него есть спецификация (Java SE, Java EE) и реализация, большинство людей используют эталонную реализацию (от Sun / Oracle), которая является примером для других, чтобы сделать свои собственные «лучше» и расширенная "реализация спецификации (API, интерфейсы и документация / JavaDoc, если вам нужно определение в одно слово, хотя это гораздо больше)

Таким образом, Java / JDK, который вы, скорее всего, используете, является всего лишь реализацией (которая очень популярна). Существует гораздо больше реализаций, некоторые имеют больше параметров конфигурации Garbage Collection, некоторые утверждают, что работают быстрее, а некоторые просто не стоит использовать.

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

Думайте об этом как об абстрактном классе, который реализация / реализация EclipseLink в Hibernate расширяет / реализует

Что касается JPA, в отличие от Hibernate, который имеет единственную реализацию, идея состоит в том, чтобы отделить интерфейс от реализации, чтобы победила «лучшая» реализация и чтобы каждый мог участвовать в игре, а не только создатель интерфейса. .

Это позволяет, например, Google App Engine поддерживать JPA, поскольку ему просто нужно следовать API (DataNucleus - это реализация), если ему нужно использовать Hibernate, ему потребуется изменить выпуск Hiberanate для поддержки Google Big Table формат (тот факт, что JPA в GAE не так уж велик, это другая история)

4 голосов
/ 14 мая 2013

JPA сам по себе является лишь спецификацией, а не продуктом;он не может выполнять упорство или что-либо еще сам по себе.JPA - это просто набор интерфейсов, требующий реализации.Есть на выбор и коммерческие реализации JPA с открытым исходным кодом, и любой сервер приложений Java EE 5 должен обеспечивать поддержку для его использования.JPA также требует, чтобы база данных сохранялась до.

1 голос
/ 23 февраля 2016

Java Persistence API (JPA) - это спецификация интерфейса прикладного программирования на языке программирования Java, которая описывает управление реляционными данными в приложениях с использованием Java Platform, Standard Edition и Java Platform, Enterprise Edition.API персистентности Java возник как часть работы группы экспертов JSR 220 процесса сообщества Java.JPA 2.0 была работой экспертной группы JSR 317.

Итак, JPA предоставляет набор интерфейсов, которые должны быть реализованы.Для языковых спецификаций всегда доступны эталонные реализации, в этом случае EclipseLink является эталонной реализацией.

С другой стороны, Hibernate реализует спецификацию JPA, но также имеет собственный собственный API.

Например:

Допустим, вы разработали спецификацию аутентификации, которая содержит только один интерфейс:

public interface AccessAuthenticator {
    public boolean verifyAccess(String username,String saltedPassword);
}

Теперь эта спецификация содержит только один интерфейс и один единственный метод.

В порядкеЧтобы использовать эту спецификацию (точнее, метод verifyAccess ()), у вас должна быть реализация.

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

Еще один аспект предоставления спецификации заключается в том, что вы фактически не используете конкретную реализацию чего-либо,поэтому сегодня говорят, что вы используете hibernate для подключения к своей базе данных, но завтра появится более совершенный ORM, который реализует спецификацию JPA, тогда все, что вам нужно сделать, это изменить зависимость в вашем проекте (простыми словами заменить файл JAR реализации / Edit theфайл pom).

0 голосов
/ 12 февраля 2014

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

Поэтому вам нужна конкретная реализация, которая будет реализовывать JPA (набор правил).Hibernate, OpenJPA - это несколько известных реализаций JPA.

...