Если JPA действительно только спецификация, то как мы можем это сделать?

В вопросе ниже ВСЕ

В чем разница между JPA и Hibernate?

сказал, что JPA является спецификацией. Это что-то абстрактное без Eclipselink или Hibernate

Правильно ли JPA javax.persistence.sth?

Кроме того, мы можем использовать конкретные вещи, такие как

javax.persistence.EntityManager.persiste javax.persistence.EntityManager.delete/remove

РЕДАКТИРОВАТЬ

Занимает ли eclipselink и hibernate свой собственный код в этих пакетах, эти классы???

2 ответа

JPA - это спецификация, и ряд разработчиков обеспечивают реализацию, которая соответствует спецификации.

Таким образом, если вы используете JPA, поскольку он предназначен для использования, вы можете выбрать один или несколько из разработчиков, и он должен работать "plug-and-play". Другими словами, вам не нужно менять код, потому что реализация будет выполнять то, что обещает спецификация.

--- Что касается разницы между JPA и Hibernate ---

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

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

Существует рецепт для создания JPA-разработки, который достаточно хорошо работает, чтобы не записывать код, не относящийся к JPA (конкретный вариант реализации).

  1. Найдите банку JPA для версии JPA, на которую вы нацеливаете.
  2. Добавьте этот jar в путь класса компиляции и путь класса времени выполнения.
  3. Найдите поставщика JPA, который вы хотите использовать (Hibernate и т.д.).
  4. Добавьте эти/эти банки только к пути пути выполнения.


JPA - это Java Persistence API, выпущенный как JSR (запросы спецификации Java) JCP (Java Community Process).

Это своего рода спецификация; другими словами, как интерфейс, реализация не включает.

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

Вот пример спецификации JPA 2.0

licensed under cc by-sa 3.0 with attribution.