Яка різниця між JPA та Spring Data JPA?


144

Я трохи розгублений щодо різниці між Spring Data-JPA та JPA. Я знаю про JPA, що це специфікація для збереження об'єктів Java до реляційної бази даних за допомогою популярної технології ORM.

Іншими словами, JPA надає інтерфейси та інші технології ORM, реалізує інтерфейси, відомі як постачальник JPA, наприклад, сплячий режим.

Тепер, що саме є Spring Data JPA?

Чи додано Spring Data JPA ще якийсь функціонал (інтерфейси) над JPA, і все ж він вказаний лише чи він також є постачальником JPA?

Я побачив, що Spring Data JPA працює навколо сховищ (DAO-шар: якщо я не помиляюся). Отже, я маю на увазі, як це відрізняється використанням 'Spring Data JPA + Hibernate' або лише використанням режиму 'Hibernate'?

Відповіді:


126

Я бачив Spring, JPA працює навколо сховищ (DAO-шар: якщо я не помиляюся). Отже, я маю на увазі, як це по-різному, використовуючи "Spring JPA + Hibernate" або використовуючи лише "Hibernate" безпосередньо?

Як ви вже говорили, JPA - це специфікація, а Hibernate - це конкретна реалізація цієї специфікації (такі реалізації зазвичай називають Провайдерами ). Використовуючи Hibernate, ви прив’язуєтеся до того постачальника, що обмежує вашу свободу переходу на інший варіант, коли це потрібно (наприклад, ви хочете використовувати EclipseLink або ObjectDB замість того, що в Hibernate є помилка, яка зупиняє процес розробки).

Цитуючи весняну документацію JPA в документації:

Реалізація рівня доступу до даних у програмі була громіздкою протягом досить тривалого часу. Занадто багато кодового шаблону довелося написати. Класи доменів були анемічними і не були розроблені в реальному об'єктовому або доменному режимі.

Використання обох цих технологій значно полегшує життя розробників стосовно наполегливості доменної моделі. Тим не менше, кількість кодових кодів для реалізації сховищ, особливо все ще досить висока. Таким чином, мета абстрагування даних Spring Repository полягає в тому, щоб значно зменшити зусилля щодо значного впровадження шарів доступу до даних для різних сховищ.

Підводячи підсумок, це поверх JPA додає ще один шар абстракції, який визначає стандартний дизайн для підтримки шару стійкості у весняному контексті. Ці визначені інтерфейси (відомі Spring) надають послуги, якими фреймворк обробляє використання JPA для подання результатів. Ви визначаєте сховище таким чином, що Spring може сканувати проект і знайти його:

<repositories base-package="com.acme.repositories" />

Таким чином, дозволяючи використовувати його в контексті контейнера або поза ним.

Тепер, що саме таке Spring, JPA. Чи весна, JPA додала додаткову функціональність (інтерфейси) над JPA, і все-таки вона вказана лише або вона також є постачальником JPA?

Spring Data JPA надає визначення для реалізації сховищ, які підтримуються під кришкою, посилаючись на специфікацію JPA, використовуючи визначеного вами постачальника.


1
Чи можу я назвати сховище сукупністю об'єктів, якими управляє Spring? Я не знаю, чому підтримка Spring JPA з використанням сховищ здається дуже схожою на EntityManager EJB - це правильне мислення чи вони зовсім інші за своїм призначенням? Заздалегідь спасибі. Мустафа.
Мустафа

1
@ Мустафа Більшість рішень мають спільні підстави. Хоча мета може бути однаковою, реалізація відрізняється через залучені інтерфейси.
Фріц

35

API API персистентності Java, який іноді називають JPA, є рамкою Java, що керує реляційними даними в додатках, що використовують платформу Java, стандартне видання (JavaSE) та платформу Java, корпоративне видання (JavaEE).

Наполегливість у цьому контексті охоплює три сфери:

  • Сам API, визначений у javax.persistenceпакеті.

  • Мова запиту персистентності Java (JPQL).

  • Об'єктно-реляційні метадані.

    введіть тут опис зображення

Spring Data JPA є частиною проекту "Spring Data Spring", який спрощує реалізацію сховищ на основі JPA.

Особливості:

  • Витончена підтримка для створення сховищ на основі Spring та JPA
  • Підтримка предикатів QueryDSL і таким чином безпечний JPA-запити
  • Прозорий аудит доменного класу
  • Підтримка сторінки, динамічне виконання запитів, можливість інтеграції спеціального коду доступу до даних
  • Перевірка @Queryанотованих запитів під час завантаження
  • Підтримка відображення сутності на основі XML
  • Конфігурація сховища на основі JavaConfig шляхом введення @EnableJpaRepositories

    введіть тут опис зображення

3

JPA

JPA - специфікація, яка стандартизує спосіб відображення об’єктів Java до реляційної системи баз даних. Будучи просто специфікації, JPA складається з набору інтерфейсів, таких як EntityManagerFactory, EntityManagerі анотацій , які допоможуть вам відображають об'єкт суті Java в таблиці бази даних.

Є кілька постачальників JPA, наприклад HIbernate, EclipseLink або Open JPA, якими ви можете скористатися.

Весняні дані JPA

Spring Data JPA - це абстракція доступу до даних JPA. Як і JPA, Spring Data JPA не може працювати без постачальника JPA.

Spring Data JPA пропонує рішення DDD Repositoryшаблон або DAO (Data Acess Object) pattern. Він також може генерувати запити JPA від вашого імені за допомогою назв методу.

Spring Data JPA може працювати з Hibernate, Eclipse Link або будь-яким іншим постачальником JPA. Дуже цікавою перевагою використання Spring або Java EE є те, що ви можете декларативно керувати межами транзакцій, використовуючи @Transactionalпримітку .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.