Является ли Spring Data JPA реализацией JPA?

Я пытаюсь "реально" понять Spring Framework. У меня есть некоторое представление о Spring Core (DI) и Spring MVC.

Для части данных я сейчас сосредоточен на Spring Data JPA. Насколько я понимаю, JPA - это стандартная спецификация, для которой существует несколько реализаций, Hibernate - знаменитый.

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

Если я правильно понял, Spring Data JPA - это уровень абстракции, предоставляемый Spring, который внутренне использует другой поставщик JPA (пример Hibernate), поэтому обычно это выглядит так:

Application ---> Spring Data JPA --> Hiberate --> JDBC → DB

Правильно ли я понимаю? Если это не значит, что Spring Data JPA вводят в заблуждение? Он не является поставщиком JPA сам по себе, это просто уровень абстракции, который работает поверх другого JPA provider.

Я не уверен, действительно ли я понимаю Spring framework или это сложная структура вообще?

Может ли кто-нибудь помочь мне понять это?

Ответ 1

Я не думаю, что это неправильно (отказ от ответственности: я возглавляю проект). Все проекты Spring Data перечисляют хранилище или API, на которых они основаны на своем имени. Spring Data JPA - это, в основном, Spring Data для JPA, так же как Spring Data MongoDB - это данные Spring для MongoDB, так же, как Spring Batch - Spring для пакетных приложений, Spring Integration - Spring для интеграционных проектов.

Сделайте правильный график зависимостей для JPA:

Application -> Spring Data JPA -> JPA <- Hibernate -> JDBC -> DataSource

-> — uses
<- — implements

То же самое для MongoDB:

Application -> Spring Data MongoDB -> MongoDB Java driver -> MongoDB

и т.д. Меня все равно интересовало, где именно у вас сложилось впечатление, что Spring Data JPA представляет собой реализацию JPA, поскольку ни страница проекта, ни справочная документация не сообщают нигде. Фактически, особенно на странице проекта очень четко указано, какие функции предоставляет проект. Кроме того, это может помочь изучить описание зонтичного проекта, который пытается установить фундаментальный контекст для всех модулей, содержащихся в нем.