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


144

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

Другими словами, JPA предоставляет интерфейсы и другие технологии ORM, реализует те интерфейсы, которые известны как поставщик JPA, например, Hibernate.

Теперь, что именно представляет собой 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 есть ошибка, которая останавливает ваш процесс разработки).

Цитирование Spring Data JPA «S документации:

Реализация уровня доступа к данным приложения была довольно громоздкой. Слишком много стандартного кода должно было быть написано. Доменные классы были анемичными и не были разработаны в реальных объектно-ориентированных или управляемых доменами манерах.

Использование обеих этих технологий значительно облегчает жизнь разработчикам в отношении устойчивости богатой модели предметной области. Тем не менее, объем стандартного кода для реализации репозиториев, особенно все еще довольно высок. Таким образом, цель абстракции репозитория Spring Data состоит в том, чтобы значительно сократить усилия по реализации уровней доступа к данным для различных хранилищ данных.

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

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

Таким образом, позволяя использовать его в контексте контейнера или вне его.

Теперь что такое весна, JPA. Является ли Spring, JPA добавленным дополнительным функционалом (Интерфейсами) по сравнению с JPA, и все же он указан только или это также поставщик JPA?

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


1
Могу ли я назвать Repository набором сущностей, которыми управляет Spring? Я не знаю почему, но поддержка Spring JPA с использованием репозиториев кажется очень похожей на EntityManager EJB - это правильное мышление или они совершенно разные по своему назначению? Заранее спасибо. Мустафа.
Мустафа

1
@Mustafa У большинства решений есть общие основания. Хотя цель может быть одинаковой, реализация отличается из-за задействованных интерфейсов.
Фриц

35

Java Persistence API, иногда называемый JPA, представляет собой среду Java, управляющую реляционными данными в приложениях с использованием платформы Java Standard Edition (JavaSE) и платформы Java Enterprise Edition (JavaEE).

Постоянство в этом контексте охватывает три области:

  • Сам API, определенный в javax.persistenceпакете.

  • Язык запросов персистентности Java (JPQL).

  • Объектно-реляционные метаданные.

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

Spring Data JPA является частью общего проекта Spring Data, который облегчает реализацию репозиториев на основе JPA.

Особенности:

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

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

3

JPA

JPA - это спецификация, которая стандартизирует способ отображения объектов Java на систему реляционных баз данных. Будучи просто спецификации, JPA состоит из набора интерфейсов, таких как EntityManagerFactory, EntityManagerи аннотаций , которые помогут вам отображающих объект сущности Java в таблице базы данных.

Существует несколько поставщиков JPA, таких как HIbernate, EclipseLink или Open JPA, которые вы можете использовать.

Spring Data JPA

Spring Data JPA - это абстракция доступа к данным JPA. Spring Data JPA, как и 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.