Что такое реализация JPA?

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

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

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

Ответ 1

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 +.

Ответ 2

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

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

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

Подумайте об этом как о классе абзаца, который реализует реализацию Hibernate JPA/EclipseLink расширяет/реализует

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

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

Ответ 3

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

Ответ 4

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

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

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

Пример:

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

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

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

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

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

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

Ответ 5

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

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