Я бачив 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, використовуючи визначеного вами постачальника.